googledriveapi:基于文本/csv id导出csv文件数据

2024-04-16 14:55:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我想导出一个csv文件的数据包含在一个谷歌驱动器文件夹基于其Id。 如果我知道它的谷歌电子表格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类型,我就导出它的内容。不过,这将抛出一个例外:“导出仅支持googledocs。” 除非我手动获取google文档id(通过双击驱动器中的csv,然后单击“用google电子表格打开”),否则我将无法自动导出它们。我该怎么做?你知道吗


Tags: 文件csvtext文件夹idexecutegetservice
1条回答
网友
1楼 · 发布于 2024-04-16 14:55:39
  • 您希望使用带有python的googleapi python客户端从Google驱动器下载CSV文件。你知道吗
  • 您已经能够使用驱动器API获取文件。你知道吗

如果我的理解是正确的,这个修改怎么样?请把这看作是几种可能的答案之一。你知道吗

修改点:

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

修改脚本1:

当您的脚本被修改时,它变成如下所示。你知道吗

在此修改中,使用了以下模块。你知道吗

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))

参考文献:

如果我误解了你的问题,而这不是你想要的结果,我道歉。你知道吗

相关问题 更多 >