You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Python获取Google Drive指定目录所有Google Sheet ID

实现方法

你的代码核心查询逻辑方向正确,补上几个缺失的处理即可正常获取指定目录下所有Google Sheet的ID:

  • 接口默认单页最多返回100条结果,目录下文件较多时需要做分页遍历,否则会遗漏数据
  • 默认查询结果会包含已移入回收站的文件,需要加过滤条件排除无效项
  • 提前给服务账号开目标目录的访问权限,否则接口会返回空结果
  • 可以直接从接口响应中提取结构化的ID列表,不需要处理原始返回的冗余字段

可直接运行的修正代码

from google.oauth2 import service_account
from googleapiclient.discovery import build

# 基础配置
SHEET_MIMETYPE = "application/vnd.google-apps.spreadsheet"
TARGET_FOLDER_ID = "替换为你的目标Google Drive目录ID"
SERVICE_ACCOUNT_PATH = "keys.json"
AUTH_SCOPES = ["https://www.googleapis.com/auth/drive.readonly"]

# 初始化Drive服务
creds = service_account.Credentials.from_service_account_file(
    SERVICE_ACCOUNT_PATH, scopes=AUTH_SCOPES
)
drive = build("drive", "v3", credentials=creds)

# 构造查询语句:筛选表格、指定父目录、排除回收站文件
query = f"mimeType = '{SHEET_MIMETYPE}' and '{TARGET_FOLDER_ID}' in parents and trashed = false"

sheet_list = []
page_token = None
# 循环遍历所有分页
while True:
    resp = drive.files().list(
        q=query,
        fields="nextPageToken, files(id, name)",
        pageSize=100,
        pageToken=page_token
    ).execute()
    # 提取当前页的文件信息
    for item in resp.get("files", []):
        sheet_list.append({
            "file_id": item["id"],
            "file_name": item["name"]
        })
    # 处理分页标记
    page_token = resp.get("nextPageToken")
    if not page_token:
        break

# 输出结果
print(f"扫描完成,共找到{len(sheet_list)}个Google Sheet文件:")
for sheet in sheet_list:
    print(f"文件名:{sheet['file_name']},文件ID:{sheet['file_id']}")

注意事项

  • 目标目录ID可以从文件夹的URL中提取,即URL中folders/路径后的字符串
  • 必须将目标文件夹共享给服务账号邮箱,该邮箱地址可在keys.json文件的client_email字段找到,授予查看权限即可满足需求
  • 如果需要递归获取所有子目录内的表格,可以在遍历过程中额外筛选mimeType为application/vnd.google-apps.folder的子项,递归调用查询逻辑即可
  • 现有drive.readonly权限范围完全支持该操作,不需要申请更高等级的权限

内容的提问来源于stack exchange,提问作者le Minh Nguyen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.01 04:42:27