【问题标题】:Google Drive API: Export csv file data based on its text/csv idGoogle Drive API:根据文本/csv id 导出 csv 文件数据
【发布时间】:2019-11-21 06:34:56
【问题描述】:

我想根据 ID 导出包含在 google drive 文件夹中的 csv 文件的数据。 如果我知道它的 Google 电子表格 ID,我可以这样做:

request = service.files().export_media(fileId='idididididididididid', mimeType='text/csv').execute()

但是,我想通过循环遍历文件夹的 csv 并通过以下代码示例获取它们的 id 来使这个过程自动化:

sn_folder_content = self.service.files().list(q='"'+sn_folder.get('id')+'"'+" in parents").execute()
sn_folder_name = sn_folder.get('name')
folder_files = sn_folder_content.get('files')
for file in folder_files:
     mime_type = file.get('mimeType')
     if mime_type == 'text/csv':                           
        id_ = file.get('id')
        self.service.files().export_media(fileId=id_, mimeType='text/csv').execute()

这基本上得到了所有文件的列表。如果文件是 Csv-s 类型,我会导出它的内容。但是,这将引发异常:“导出仅支持 Google 文档”。 除非我手动获取 google doc id(通过双击驱动器中的 csv,然后单击“使用 google 电子表格打开”),否则我将无法自动导出它们。我该怎么做?

【问题讨论】:

    标签: python csv google-drive-api


    【解决方案1】:
    • 您想使用带有 python 的 google-api-python-client 从您的 Google Drive 下载 CSV 文件。
    • 您已经能够使用 Drive API 获取文件。

    如果我的理解是正确的,那么这个修改呢?请认为这只是几个可能的答案之一。

    修改点:

    • 您只能使用搜索查询检索特定文件夹中的 CSV 文件。
      • 在您的情况下,搜索查询是 "'"+sn_folder.get("id")+"'"+" in parents and mimeType='text/csv'"
      • 这样,只能从特定文件夹中检索 CSV 文件。
    • 下载Google Docs以外的文件时,请使用get_media的方法,而不是export_media

    修改脚本一:

    当你的脚本被修改后,变成如下。

    在本次修改中,使用了以下模块。

    import io
    from googleapiclient.http import MediaIoBaseDownload
    

    修改后的脚本如下。

    sn_folder_content = self.service.files().list(
        q="'"+sn_folder.get("id")+"'"+" in parents and mimeType='text/csv'").execute()
    # sn_folder_name = sn_folder.get('name')  # <--- It seems that this is not used.
    folder_files = sn_folder_content.get('files')
    for file in folder_files:
        print(file['name'])
        id_ = file.get('id')
        request = self.service.files().get_media(fileId=id_)
        fh = io.FileIO(file['name'], mode='wb')
        downloader = MediaIoBaseDownload(fh, request)
        done = False
        while done is False:
            status, done = downloader.next_chunk()
            print('Download %d%%.' % int(status.progress() * 100))
    

    修改脚本2:

    如果您想通过转换将Google电子表格下载为CSV文件,您可以使用export_media的方法。本例修改后的脚本如下。

    sn_folder_content = self.service.files().list(
        q="'"+sn_folder.get("id")+"'"+" in parents and mimeType='application/vnd.google-apps.spreadsheet'").execute()
    # sn_folder_name = sn_folder.get('name')  # <--- It seems that this is not used.
    folder_files = sn_folder_content.get('files')
    for file in folder_files:
        print(file['name'])
        id_ = file.get('id')
        request = self.service.files().export_media(fileId=id_, mimeType='text/csv')
        fh = io.FileIO(file['name'] + '.csv', mode='wb')
        downloader = MediaIoBaseDownload(fh, request)
        done = False
        while done is False:
            status, done = downloader.next_chunk()
            print('Download %d%%.' % int(status.progress() * 100))
    

    参考:

    如果我误解了您的问题并且这不是您想要的结果,我深表歉意。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-05-22
      • 2017-05-08
      • 2020-06-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-16
      • 1970-01-01
      相关资源
      最近更新 更多