【Python】Google SpreadSheets에서 수중 CSV 파일 가져오기

개요



제목 그대로.
Google SpreadSheets에서 직접 CSV 파일의 내용을 가져옵니다.



환경


  • Docker
  • Python3계
  • Google Cloud Platform

  • 아래 준비



    먼저 외부에서 Google SpreadSeets에 액세스하기 위해 'Google Cloud Platform'을 설정합니다.

    htps : // 이런. cぉd. 오, ぇ. 코m/


    아직 Google Cloud Platform 계정을 가지고 있지 않은 분은 아래 기사 등을 참고로 작성해 주세요.

    참조 기사 : 앞으로 시작하는 GCP (GCE) 안전하게 무료 테두리를 쓰러뜨리세요

    Google Sheets API 사용





    왼쪽 사이드 바에서 "API와 서비스 → 라이브러리"를 선택. 각종 Google API가 나오므로 그 중에서 'Google Sheets API'를 찾아서 활성화합니다.



    서비스 계정 만들기



    다음 왼쪽 사이드 바에서 "API와 서비스 → 자격 증명"을 선택. "서비스 계정"을 만듭니다.
    참조 기사 : GCP 서비스 계정 이해


  • 서비스 계정 이름
  • 적당

  • 서비스 계정 설명
  • 알기 쉽다면 무엇이든 OK


  • 서비스 계정명 이외는 기본적으로 임의 입력 항목이므로, 특히 조건이 없으면 공란으로 괜찮습니다.



    비밀 키 얻기



    서비스 어카운트 상세 페이지의 하단에 가면 「키를 추가」라고 하는 항목이 있으므로, JSON 형식으로 비밀키를 작성. 그러면 수중 장치에 JSON 파일이 다운로드되므로 "client_secret.json"에 이름을 바꾸어 보관하십시오. (나중에 사용합니다.)

    Google SpreadSheets 만들기





    이번 조작을 위한 적당한 Google SpreadSheets를 작성해 둡니다.



    그리고 오른쪽에있는 "공유"버튼에서 방금 만든 서비스 계정의 이메일 주소를 "편집자"로 추가하는 것도 잊지 마세요.

    코드



    API를 통해 Google SpreadSheets에 액세스할 준비가 되었으므로 드디어 코드를 작성합니다.

    환경 구축



    먼저 Python을 실행할 수 있는 환경을 Docker에서 준비합니다.

    디렉토리 만들기


    $ mkdir csv-to-google-spread-sheets
    $ cd csv-to-google-spread-sheets
    $ mkdir opt
    

    다양한 파일 만들기


    touch Dockerfile
    touch docker-compose.yml
    touch requirements.txt
    

    ./Dockerfile
    FROM python:3
    USER root
    
    RUN apt-get update
    RUN apt-get -y install locales && \
        localedef -f UTF-8 -i ja_JP ja_JP.UTF-8
    
    ENV LANG ja_JP.UTF-8
    ENV LANGUAGE ja_JP:ja
    ENV LC_ALL ja_JP.UTF-8
    ENV TZ JST-9
    ENV TERM xterm
    
    ADD . /code
    WORKDIR /code
    
    RUN apt-get install -y vim less
    RUN pip install --upgrade pip
    RUN pip install --upgrade setuptools
    RUN pip install -r requirements.txt
    

    ./docker-compose.yml
    version: '3'
    services:
      python3:
        restart: always
        build: .
        container_name: 'python3'
        working_dir: '/root/'
        tty: true
        volumes:
          - ./opt:/root/opt
    

    ./requirements.txt
    gspread
    oauth2client
    

    client_secret.json 배치



    서비스 계정을 만들 때 다운로드한 개인 키 "client_secret.json"을 opt 폴더 아래에 배치합니다.

    최종적으로 다음과 같은 구성이 되어 있으면 OK.
    csv-to-google-spread-sheets
    ├─ opt
      ├─ client_secret.json
    ├─ docker-compose.yml
    ├─ Dockerfile
    ├─ requirements.txt
    

    컨테이너 시작


    $ docker-compose up  -d
    $ docker exec -it python3 /bin/bash
    $ cd opt
    
    root@*********:~/opt# 
    

    테스트 실행


    touch test.py
    

    ./opt/test.py
    print('test')
    
    $ python test.py
    
    test
    

    제대로 「test」라고 출력되고 있으면 성공입니다.

    구현



    환경 구축을 할 수 있었으므로, 본격적인 코드를 써 갑니다.
    $ touch gs.py
    

    ./opt/gs.py
    
    import gspread
    from oauth2client.service_account import ServiceAccountCredentials
    import csv
    
    SPREADSHEET_KEY = 'それぞれの値を入力' # 「docs.google.com/spreadsheets/d/xxxxxxxxxxxxx/edit#gid=0」の「xxxxxxxxxxxxx」部分
    
    scope = 'https://spreadsheets.google.com/feeds'
    credentials_file_path = './client_secret.json'
    
    credentials = ServiceAccountCredentials.from_json_keyfile_name(credentials_file_path, scope)
    
    gc = gspread.authorize(credentials)
    workbook = gc.open_by_key(SPREADSHEET_KEY)
    
    workbook.values_update(
        'シート1', # どのシートに書き込むのかを指定
        params={'valueInputOption': 'USER_ENTERED'},
        body={'values': list(csv.reader(open('./test.csv', encoding='utf_8_sig')))}
    )
    

    마지막으로 Google 스프레드시트에 가져올 CSV 파일을 준비합니다.
    $ touch test.csv
    

    /opt/test.csv
    Name,Age,Country
    Taro,20,Japan
    

    다음 명령을 실행하고 해당 Google SpreadSheets에 ↑의 내용이 기록되어 있으면 성공입니다.
    $ python gs.py
    



    후기



    수고하셨습니다. 기본적인 흐름은 이상입니다. 그리고는 각자의 목적에 맞추어 커스터마이즈 해 보세요. Lambda라든지 잘 사용할 수 있을 것 같은 생각이 듭니다.

    좋은 웹페이지 즐겨찾기