我正在通过gspread(http://gspread.readthedocs.io/en/latest/oauth2.html)编写文档,并且能够使介绍性代码块正常工作:
import gspread
gc = gspread.authorize(credentials)
但是当我运行以下脚本时:
import gspread
from oauth2client.service_account import ServiceAccountCredentials
scope = ['https://spreadsheets.google.com/feeds']
credentials = ServiceAccountCredentials.from_json_keyfile_name('My Project-******97.json', scope)
gc = gspread.authorize(credentials)
wks = gc.open("rules_test_1.csv").sheet1
我明白了:
gspread.exceptions.SpreadsheetNotFound
如何才能访问此表?
答案 0 :(得分:1)
基本上,服务帐户不您的Google帐户,这就是找不到您的文件的原因。 gspread的作者应该在他们的示例代码中解释过。您有两种选择: -
与服务帐户用户共享您的电子表格或其所在的文件夹。这是最简单的方法,因为您需要做的就是从GDrive中获取共享,然后您现有的代码才能运行。缺点是保持共享文件可能很笨拙。我的建议是创建一个名为“与我的服务帐户共享”的专用文件夹,并将该文件夹中的所有文件作为子文件。请记住,文件可以有多个父项,因此您仍然可以保留文件夹结构。请参阅How do I search sub-folders and sub-sub-folders in Google Drive?的答案,了解Drive文件夹的工作方式。
使用标准帐户身份验证替换服务帐户身份验证。这需要对您的代码进行一些小的更改。结果是您的应用直接与您的云端硬盘帐户通信,而无需将服务帐户作为代理。因此,只要安全含义可以接受,它就会更加优雅。您将使用存储的刷新令牌。有关如何执行此操作的一些信息位于How do I authorise an app (web or installed) without user intervention? (canonical ?)
无论是对还是错。这取决于您的具体要求。