컴퓨터잡담

파이썬 gspread 사용법

by nanumi posted Jun 25, 2021
?

단축키

Prev이전 문서

Next다음 문서

ESC닫기

크게 작게 위로 아래로 댓글로 가기 인쇄

출처 : https://docs.gspread.org/en/latest/advanced.html

 


1.png

gc.open_by_url을 사용하려면 반드시 편집자가 사용할 수 있게 공유자를 추가해야 합니다.

 


 

 

 

다음 코드로 새 Python 파일을 만듭니다.

import gspread

gc = gspread.oauth()

sh = gc.open("Example spreadsheet")

print(sh.sheet1.get('A1'))

이 코드를 실행하면 인증을 요청하는 브라우저가 실행됩니다. 웹 페이지의 지침을 따르십시오. 완성되면, gspread 상점 옆에있는 config 디렉토리에서 자격 증명 권한 credentials.json을 . 브라우저에서 한 번만 인증하면됩니다. 다음 실행은 저장된 자격 증명을 재사용합니다.
 

gspread 사용의 예

앱을 아직 승인하지 않은 경우 먼저 인증을 읽어보세요 .

스프레드 시트 열기

Google 문서에 표시되는 제목으로 스프레드 시트를 열 수 있습니다.

sh = gc.open('My poor gym results')

구체적으로 알고 싶다면 키 (스프레드 시트의 URL에서 추출 할 수 있음)를 사용하십시오.

sht1 = gc.open_by_key('0BmgG6nO_6dprdS1MN3d3MkdPa142WFRrdnRRUWl1UFE')

또는 해당 키를 추출하는 것이 너무 게으르다면 전체 스프레드 시트의 URL을 붙여 넣으세요.

sht2 = gc.open_by_url('https://docs.google.com/spreadsheet/ccc?key=0Bm...FE&hl')

 

스프레드 시트 만들기

create()새 빈 스프레드 시트를 만드는 데 사용 합니다.

sh = gc.create('A new spreadsheet')

 

스프레드 시트 공유

이메일이 otto@example.com 인 경우 새로 생성 된 스프레드 시트를 자신과 공유 할 수 있습니다.

sh.share('otto@example.com', perm_type='user', role='writer')

share()허용되는 매개 변수의 전체 목록은 문서를 참조하세요 .

워크 시트 선택

인덱스로 워크 시트를 선택합니다. 워크 시트 색인은 0부터 시작합니다.

worksheet = sh.get_worksheet(0)

또는 제목으로 :

worksheet = sh.worksheet("January")

또는 가장 일반적인 경우 : Sheet1 :

worksheet = sh.sheet1

모든 워크 시트 목록을 가져 오려면 다음을 수행하십시오.

worksheet_list = sh.worksheets()

워크 시트 생성

worksheet = sh.add_worksheet(title="A worksheet", rows="100", cols="20")

워크 시트 삭제

sh.del_worksheet(worksheet)

셀 값 얻기

A1 표기법 사용 :

val = worksheet.acell('B1').value

또는 행 및 열 좌표 :

val = worksheet.cell(1, 2).value

 

    txt1 = str(entry_0.get()) # entry_0에 문자열 값을 txt1에 저장한다.
    cell = worksheet.find(txt1) # 워크시트에서 txt1 값으로 셀 정보를 cel1에 정한다.
    #print("찾은 셀위치 R%sC%s" % (cell.row, cell.col))
    cell_list = worksheet.findall(txt1) #워크시트에서 txt1로 검색한 모든 결과값을 cell_list에 저장한다.
    print(cell_list) #cell_list를 출력한다.
    value = cell.value #cel1값을 value에 저장한다.
    print(value) #value값을 저장한다.
    row_number = cell.row #cel1의 row 위치값을 row_number에 저장한다.
    print(row_number) #row_number를 출력한다.
    column_number = cell.col #cel1의 col 위치값을 colnum_number에 저장한다.
    print(column_number) #column_number를 출력한다.
    vv = worksheet.cell(cell.row, cell.col+3).value #워크시트의 cel1의 행, 열에 있는 결과값을 vv에 저장한다.
    print(vv) #vv값을 출력한다.
    

 

 

 

업데이트 / 삽입

업데이트

해당 키의 값을 업데이트 하고자 한다면?

worksheet.update('B1', '<Value>')

위와같이 첫번째 인자에는 행열의 위치를 지정하는데 나 같은 경우엔 소스코드에서 딕셔너리로 열에 대한 정보를 만들어 놓았다.

col = {
    'key': 'A',
    'value': 'B'
}

worksheet.update(col['value'] + str(t.row), '<Value>')

 

멀티라인? 다중배열구조로 한꺼번에 많은 데이터 업데이트 시키기

worksheet.update('B3:C4', [['값1','친구'],["널1",'주식']])   # 값과 친구는 B, C열의 3번행에 / 널1과 주식은 B, C 열의 4번행에 들어갑니다.

결과>>

1.png

 

 

삽입

worksheet.insert_row(['<Value>', '<Value>'])

insert_row 메서드를 사용하면 0번 행에 값을 추가한다. 0번 행은 구분 값으로 사용하려던터라 마지막 행에 넣는 방법을 찾고자 하였으나 구분값을 굳이 사용하지 않는다면 활용성이 높을 것으로 보인다.

여하튼 값을 찾을 때 값이 없으면 새로운 행을 삽입하는 코드는 아래처럼 작성할 수 있겠다.

find_row = None
try:
    find_row = worksheet.find("<Value>")
except:
    worksheet.insert_row(['<Value>', '<Value>'])

 

셀 수식을 얻으려면 다음을 수행하십시오.

cell = worksheet.acell('B1', value_render_option='FORMULA').value

# or

cell = worksheet.cell(1, 2, value_render_option='FORMULA').value

행 또는 열에서 모든 값 가져 오기

첫 번째 행에서 모든 값을 가져옵니다.

values_list = worksheet.row_values(1)

첫 번째 열에서 모든 값을 가져옵니다.

values_list = worksheet.col_values(1)

 

 

워크 시트의 모든 값을 목록 목록으로 가져 오기

list_of_lists = worksheet.get_all_values()

 

워크 시트의 모든 값을 목록 목록으로 가져와서 "특정단어"가 들어간 셀의 정보 찾기

1.png

 

list_of_lists = worksheet.get_all_values()
for ii in range(0,len(list_of_lists)):
    for iii in range(0,len(list_of_lists[ii])):
        if "값" in list_of_lists[ii][iii]:
            print(list_of_lists[ii][iii])
            cell = worksheet.find(list_of_lists[ii][iii])
            print("셀의 행,열번호 : "cell.row,cell.col)
            

결과>>

값1

셀의 행,열번호 :  4 2     >> 4번째 행의 B열의 값은 값1

미쳐 값!!!

셀의 행,열번호 :  5 1     >>  5번째 행의 A열의 값은 미쳐 값!!!

값싸다

셀의 행,열번호 :  5 4     >> 5번째 행의 D열의 값은 값싸다

 

 

 

워크 시트의 모든 값을 사전 목록으로 가져 오기

list_of_dicts = worksheet.get_all_records()

세포 찾기

문자열과 일치하는 셀 찾기 :

cell = worksheet.find("Dough")

print("Found something at R%sC%s" % (cell.row, cell.col))

정규식과 일치하는 셀 찾기

amount_re = re.compile(r'(Big|Enormous) dough')
cell = worksheet.find(amount_re)

일치하는 모든 셀 찾기

문자열과 일치하는 모든 셀 찾기 :

cell_list = worksheet.findall("Rug store")

정규 표현식과 일치하는 모든 셀을 찾습니다.

criteria_re = re.compile(r'(Small|Room-tiering) rug')
cell_list = worksheet.findall(criteria_re)

셀 개체

각 셀에는 값과 좌표 속성이 있습니다.

value = cell.value
row_number = cell.row
column_number = cell.col

셀 업데이트

A1 표기법 사용 :

worksheet.update('B1', 'Bingo!')

또는 행 및 열 좌표 :

worksheet.update_cell(1, 2, 'Bingo!')

범위 업데이트

worksheet.update('A1:B2', [[1, 2], [3, 4]])

range메소드 에서 가져 오거나 목록을 직접 만들 수 있습니다 .

a1 = worksheet.acell('A1')

c5 = worksheet.acell('C5')
a1.value = 'Hello'
c5.value = 'World'
wk.update_cells([a1, c5])

이렇게하면 한 번의 호출로 여러 셀이 업데이트됩니다.

 

 

0

Burnhash는 요청하지 않고는 Cell을 얻을 수있는 방법이 없다는 점에서 정확합니다. 그러나 더미 클래스를 사용하여 원하는 동작을 얻을 수있었습니다.

    class Cell:
        def __init__(self, c, r, v):
            self.col = c
            self.row = r
            self.value = v

    cell1 = Cell(1, 1, 'value1')  # A1
    cell2 = Cell(2, 1, 'value2')  # B1
    wk.update_cells([cell1, cell2])

 

 

서식

다음은 기본 서식의 예입니다.

설정 A1 : B1의 굵게 텍스트 형식 :

worksheet.format('A1:B1', {'textFormat': {'bold': True}})

A2 : B2 셀 범위 의 배경색을 검정색으로 지정하고 수평 정렬, 텍스트 색상 및 글꼴 크기를 변경합니다.

worksheet.format("A2:B2", {
    "backgroundColor": {
      "red": 0.0,
      "green": 0.0,
      "blue": 0.0
    },
    "horizontalAlignment": "CENTER",
    "textFormat": {
      "foregroundColor": {
        "red": 1.0,
        "green": 1.0,
        "blue": 1.0
      },
      "fontSize": 12,
      "bold": True
    }
})

의 두 번째 인수 format()는 업데이트 할 필드가 포함 된 사전입니다. 형식 옵션의 전체 사양은 Sheet API Reference의 CellFormat 에서 확인할 수 있습니다 .

gspread-formatting 은 기본을 넘어 설 때 도움이되는 광범위한 기능을 제공합니다.

Pandas와 함께 gspread 사용

pandas 는 데이터 분석을위한 인기있는 라이브러리입니다. 시트에서 pandas DataFrame으로 데이터를 가져 오는 가장 간단한 방법은 다음을 사용하는 것입니다 get_all_records().

import pandas as pd

dataframe = pd.DataFrame(worksheet.get_all_records())

다음은 시트에 데이터 프레임을 쓰는 기본 예입니다. 함께 update()우리 dataframe의 값에 따르는 시트의 첫 번째 행으로 dataframe의 헤더를 입력 :

import pandas as pd

worksheet.update([dataframe.columns.values.tolist()] + dataframe.values.tolist())

고급 Pandas 사용 사례는 다음 라이브러리를 확인하세요.

NumPy와 함께 gspread 사용

NumPy 는 Python의 과학 컴퓨팅을위한 라이브러리입니다. 고성능 다차원 배열 작업을위한 도구를 제공합니다.

시트의 내용을 NumPy 배열로 읽습니다.

import numpy as np
array = np.array(worksheet.get_all_values())

위의 코드는 데이터가 시트의 첫 번째 행에서 시작한다고 가정합니다. 당신이 첫 번째 행 머리글 행이있는 경우 교체 필요 worksheet.get_all_values()로 worksheet.get_all_values()[1:].

시트에 NumPy 배열을 씁니다.

import numpy as np

array = np.array([[1, 2, 3], [4, 5, 6]])

# Write the array to worksheet starting from the A2 cell
worksheet.update('A2', array.tolist())