Как заменить содержимое файла Google Drive с помощью python? - PullRequest
0 голосов
/ 15 ноября 2018

У меня есть файл Google Диска, который имеет определенный идентификатор файла, на который полагаются другие, чтобы они могли его открыть. Мне нужно заменить содержимое этого файла (файл CSV) новым содержимым в Python. Хотя я не могу найти никаких примеров того, как это сделать. Я использую Google Drive API v3 (googleapiclient). Пожалуйста, помогите.

1 Ответ

0 голосов
/ 16 ноября 2018

Мне удалось создать успешный тест.Я создал файл (test.txt) на диске Google с некоторым основным текстом в нем.Я получил идентификатор файла, поделившись ссылкой и извлекая идентификатор из ссылки, а затем снова поделился им.Этот код Python успешно заменил текст в этом файле текстом в _textStream.Моя конечная цель замены информации CSV достигается аналогичным образом, за исключением того, что объектом BytesIO будут данные CSV, а _mimeType будет 'text / csv':

from oauth2client import file, client, tools
from googleapiclient.discovery import build
from httplib2 import Http
from io import BytesIO
from apiclient.http import MediaIoBaseUpload

def gauthenticate():
    # If modifying these scopes, delete the file token.json.
    SCOPES = 'https://www.googleapis.com/auth/drive'
    store = file.Storage('token.json')
    creds = store.get()
    if not creds or creds.invalid:
        flow = client.flow_from_clientsecrets('credentials.json', SCOPES)
        creds = tools.run_flow(flow, store)
    service = build('drive', 'v3', http=creds.authorize(Http()))
    return service

def SaveTxtGDrive(service):
    # Fill in your own file id here:
    fileId = '1kEyXXXXXXXX_gEd6lQq'
    _mimeType = 'text/plain'
    _textStream = BytesIO(b'Here is some arbitrary data\nnew text\nAnother line\n') 
    _media = MediaIoBaseUpload(_textStream, mimetype=_mimeType,
        chunksize=1024*1024, resumable=True)
    _updatedFile = service.files().update(fileId=fileId,
        media_body=_media).execute()

def main():
    _service = gauthenticate()
    SaveTxtGDrive(_service)
    return

if (__name__ == '__main__'):
    main()    

Документация по API Google наверняка непрозрачна иv3 имеет несколько примеров в Python!Очевидно, что ключ Drive API должен быть настроен, и API должен быть включен для Google Drive, чтобы это работало.Я просто следил за сообщениями об ошибках, которые появлялись, чтобы включить все это.Я надеюсь, что это помогает кому-то еще.

...