如何通过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
相关产品推荐
相关产品推荐

