Ошибка Gspread File not found при создании новой таблицы на общем диске и в Colab - PullRequest
0 голосов
/ 08 мая 2020

Я работаю в Google Colab, пытаясь обработать некоторые данные и сохранить их в виде электронной таблицы Google на общем диске, которым я управляю. Я использую gspread 3.6.0.

Папка, в которую я пытаюсь сохранить, уже существует (я сам ее создал). Вот мой тестовый код:

#Authentication
from google.colab import auth
auth.authenticate_user()

import gspread
from oauth2client.client import GoogleCredentials

gc = gspread.authorize(GoogleCredentials.get_application_default())    
test_df = pd.DataFrame(np.random.randint(0,100,size=(100, 4)), columns=list('ABCD'))

folder_id = '1piOfOFFw60hh5SbC9gIPAveCk90thI9_'
sh = gc.create('test_df', folder_id=folder_id)

Ошибка, выданная gspread, следующая:

---------------------------------------------------------------------------
APIError                                  Traceback (most recent call last)
<ipython-input-38-a6c430392153> in <module>()
      2 folder_id = '1L_ZYzDHi59yHNo2F0ZF8BnQCWJQEu9zR'
      3 
----> 4 sh = gc.create('df_prueba', folder_id=folder_id)

1 frames
/usr/local/lib/python3.6/dist-packages/gspread/client.py in create(self, title, folder_id)
    194             payload['parents'] = [folder_id]
    195 
--> 196         r = self.request('post', DRIVE_FILES_API_V3_URL, json=payload)
    197         spreadsheet_id = r.json()['id']
    198         return self.open_by_key(spreadsheet_id)

/usr/local/lib/python3.6/dist-packages/gspread/client.py in request(self, method, endpoint, params, data, json, files, headers)
     71             return response
     72         else:
---> 73             raise APIError(response)
     74 
     75     def list_spreadsheet_files(self, title=None):

APIError: {'errors': [{'domain': 'global', 'reason': 'notFound', 'message': 'File not found: 1L_ZYzDHi59yHNo2F0ZF8BnQCWJQEu9zR.', 'locationType': 'parameter', 'location': 'fileId'}], 'code': 404, 'message': 'File not found: 1L_ZYzDHi59yHNo2F0ZF8BnQCWJQEu9zR.'}

У меня нет проблем с чтением файлов с общего диска.

Если я изменю folder_id на папку с Моего диска, код заработает. Я проверил документацию gspread, но не нашел никаких параметров, связанных с общими дисками в API.

Есть подсказки?

1 Ответ

0 голосов
/ 25 мая 2020

Это не изящно, но вы можете использовать Drive API. Попробуйте коды ниже.

from googleapiclient.discovery import build

folder_id = "1piOfOFFw60hh5SbC9gIPAveCk90thI9_"
title = "test_df"

body = {
    "name": title,
    "mimeType": "application/vnd.google-apps.spreadsheet",
    "parents": [folder_id]
}

service = build("drive", "v3", credentials=CREDENTIALS)
service.files().create(body=body, fields="id", supportsAllDrives=True).execute()
...