使用Python将Google工作表转换为带有URL的CSV

使用Python将Google工作表转换为带有URL的CSV,python,csv,url,google-sheets,google-drive-api,Python,Csv,Url,Google Sheets,Google Drive Api,我正在试图弄清楚如何让这个程序(在线找到)使用URL或Google Sheets ID而不是名称来查找文档并转换为CSV。目前它使用文件名并正常工作。这是我第一次使用API,我已经有一段时间没有使用python了,非常感谢您的帮助 from __future__ import print_function import os from apiclient import discovery from httplib2 import Http from oauth2client import f

我正在试图弄清楚如何让这个程序(在线找到)使用URL或Google Sheets ID而不是名称来查找文档并转换为CSV。目前它使用文件名并正常工作。这是我第一次使用API,我已经有一段时间没有使用python了,非常感谢您的帮助

from __future__ import print_function
import os


from apiclient import discovery
from httplib2 import Http
from oauth2client import file, client, tools



SCOPES = 'https://www.googleapis.com/auth/drive.readonly'
store = file.Storage('storage.json')
creds = store.get()
if not creds or creds.invalid:
    flow = client.flow_from_clientsecrets('client_secret.json', SCOPES)
    creds = tools.run_flow(flow, store)
DRIVE = discovery.build('drive', 'v3', http=creds.authorize(Http()))

FILENAME = 'No Name'
SRC_MIMETYPE = 'application/vnd.google-apps.spreadsheet'
DST_MIMETYPE = 'text/csv'

files = DRIVE.files().list(
    q='name="%s" and mimeType="%s"' % (FILENAME, SRC_MIMETYPE),
    orderBy='modifiedTime desc,name').execute().get('files', [])

if files:
    fn = '%s.csv' % os.path.splitext(files[0]['name'].replace(' ', '_'))[0]
    print('Exporting "%s" as "%s"... ' % (files[0]['name'], fn), end='')
    data = DRIVE.files().export(fileId=files[0]['id'], mimeType=DST_MIMETYPE).execute()
    if data:
        with open(fn, 'wb') as f:
            f.write(data)
        print('DONE')
    else:
        print('ERROR (could not download file)')
else:
    print('!!! ERROR: File not found')

编辑:为了增加清晰度

我相信你的目标和现状如下

  • 您希望使用电子表格ID而不是电子表格名称将Google电子表格导出为CSV文件
  • 您希望使用googleapis for python实现这一点
  • 您已经能够使用驱动API从Google Drive获取值
修改点:
  • 在脚本中,为了检索电子表格ID,使用电子表格名称使用“文件:列表”方法,并使用“文件:导出”方法将电子表格导出为CSV
  • 为了实现您的目标,您可以直接使用“文件:导出”方法的电子表格ID
  • 并且,在脚本中,文件名是从电子表格名称中检索的。在本例中,“Files:get”方法用于从电子表格ID检索电子表格名称
当上述各点反映到脚本中时,它将变成如下所示。请修改下面的脚本
DRIVE=discovery.build('DRIVE','v3',http=creds.authorize(http())
,如下所示

修改脚本: 参考资料:

在您的问题中,您说
我正在试图找出如何让这个程序(在线找到)使用URL或Google Sheets ID而不是名称来查找文档。
。但是在你的标题中,你说
使用Python
用URL将谷歌工作表转换为CSV。这样,我无法理解你的目标。我为我糟糕的英语水平道歉。我可以问一下你的目标的细节吗?目前该程序将谷歌工作表转换为CSV,但它需要文档的名称。我希望能够使用URL/Google Sheet ID而不是名称来定位文档。这有意义吗?谢谢你的回复。从你的回答中,我提出了一个答案。你能确认一下吗?如果这不是你所期望的方向,我很抱歉。谢谢你,这似乎很受欢迎。谢谢你让我知道。我很高兴你的问题解决了。如果您的问题已解决,请按“接受”按钮。与您有相同问题的其他人也可以将您的问题作为可以解决的问题。我认为你的问题和解决方案对他们会有帮助。如果你找不到按钮,尽管告诉我。
DRIVE = discovery.build('drive', 'v3', http=creds.authorize(Http()))

spreadsheetId = '###' # Please set the Spreadsheet ID.
DST_MIMETYPE = 'text/csv'

# Retrieve Spreadsheet name from Spreadsheet ID.
res1 = DRIVE.files().get(fileId=spreadsheetId).execute()

# Export Spreadsheet as CSV.
fn = '%s.csv' % os.path.splitext(res1['name'].replace(' ', '_'))[0]
print('Exporting "%s" as "%s"... ' % (res1['name'], fn), end='')
data = DRIVE.files().export(
    fileId=spreadsheetId, mimeType=DST_MIMETYPE).execute()
if data:
    with open(fn, 'wb') as f:
        f.write(data)
    print('DONE')
else:
    print('ERROR (could not download file)')