Файл не найден при использовании функции gspread import_csv в python
Я использую пакет gspread в python.
Я пытаюсь импортировать CSV в электронную таблицу Google, но я получил ошибку.
Мой код выглядит следующим образом:
import gspread
from oauth2client.service_account import ServiceAccountCredentials
spreadsheet_id = '1tFhK2-zebkG1fZFF6Xe5LHyONkh97ANOkcf'
scopes = [
'https://spreadsheets.google.com/feeds',
'https://www.googleapis.com/auth/drive'
]
creds = ServiceAccountCredentials.from_json_keyfile_name('./credentials.json', scopes=scopes)
client = gspread.authorize(creds)
file = open('test_csv.csv',mode='r')
csv = file.read()
file.close()
client.import_csv(spreadsheet_id, csv)
Я получил ошибку:
---------------------------------------------------------------------------
APIError Traceback (most recent call last)
<ipython-input-264-eb5d4ce7bc69> in <module>()
----> 1 client.import_csv(spreadsheet_id, csv)
~/anaconda3/lib/python3.6/site-packages/gspread/client.py in import_csv(self, file_id, data)
238 'convert': True
239 },
--> 240 headers=headers
241 )
242
~/anaconda3/lib/python3.6/site-packages/gspread/client.py in request(self, method, endpoint, params, data, json, files, headers)
77 return response
78 else:
---> 79 raise APIError(response)
80
81 def list_spreadsheet_files(self):
APIError: {
"error": {
"errors": [
{
"domain": "global",
"reason": "notFound",
"message": "File not found: 1tFhK2-zebkG1fZFF6Xe5LHyONkh97ANOkcf",
"locationType": "other",
"location": "file"
}
],
"code": 404,
"message": "File not found: 1tFhK2-zebkG1fZFF6Xe5LHyONkh97ANOkcf"
}
}
Тем не менее, я не получаю ошибку, когда я пытаюсь читать или писать в ячейке напрямую (с update_cell
например), поэтому электронная таблица существует, и я могу написать на ней. Это конкретно import_csv
это выдает ошибку.
Я создал страницу Google с помощью веб-интерфейса Google Drive. Затем я добавил свой client_email с credential.json (blabla@blabla-220209.iam.gserviceaccount.com) в авторизованную почту электронной таблицы.
Любое предложение?
3 ответа
Я исправил это, поделившись файлом с 'client_email', найденным в файле JSON учетных данных. Хотя я не проверял это, я также подозреваю, что публикация электронной таблицы в открытом доступе (кто может видеть ее в Интернете) решит проблему.
Ура!
Перейдя к своей таблице и изменив параметры общего доступа, которые может редактировать любой, у кого есть ссылка, исправляет это.
Вот код, который я использовал:
import gspread
from oauth2client.service_account import ServiceAccountCredentials
scope = ["(some scopes)"]
creds = ServiceAccountCredentials.from_json_keyfile_name("creds.json", scope)
gc = gspread.service_account("creds.json", scope)
client = gspread.authorize(creds)
sLink = "(link)"
sh = gc.open_by_url(sLink)
sh.share('<example.email.com>', perm_type='user', role='writer')
Убедитесь, что вы используете последнюю версию gspread. Тот, который, например, в комплекте с Google Colab, устарел:
!pip install --upgrade gspread
Это исправило ошибку в
gs.csv_import
для меня.