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

Python调用Google Drive API的service.files().list().execute()返回NULL问题

解决Google Drive API files.list返回空的问题

可能的原因及对应解决方案

1. 服务账号无目标文件夹访问权限

服务账号是独立的身份实体,并非你的个人Google账号。必须将目标文件夹的访问权限授予服务账号的邮箱(即代码输出中的xxx@xxx-1234.iam.gserviceaccount.com):

  • 打开Google Drive中的目标文件夹
  • 右键点击文件夹 → 选择「共享」
  • 输入服务账号的邮箱地址,设置权限为「查看者」(或更高权限,按需选择)
  • 保存共享设置

2. 传入的Folder ID错误

确认调用函数时传入的folder_id是否准确:

  • Google Drive文件夹的ID是其URL中https://drive.google.com/drive/folders/之后的字符串
  • 检查是否存在拼写错误、多余空格或字符缺失

3. 查询语句未明确排除已删除文件

默认情况下files.list不会返回回收站中的文件,但可在查询条件中明确添加过滤规则,避免潜在干扰:

q="'{0}' in parents and trashed=false".format(folder_id)

4. 文件存放在目标文件夹的子层级中

当前代码仅查询目标文件夹的直接子项,若文件在子文件夹内,需递归遍历所有层级:

def get_all_files(service, folder_id):
    items = []
    next_page_token = None
    while True:
        results = service.files().list(
            q=f"'{folder_id}' in parents and trashed=false",
            pageToken=next_page_token,
            fields="nextPageToken, files(id, name, modifiedTime, mimeType)"
        ).execute()
        items.extend(results.get("files", []))
        next_page_token = results.get("nextPageToken")
        if not next_page_token:
            break
    # 遍历子文件夹并递归获取文件
    subfolders = [item for item in items if item['mimeType'] == 'application/vnd.google-apps.folder']
    for folder in subfolders:
        items.extend(get_all_files(service, folder['id']))
    return items

5. 混淆服务账号Drive与个人Drive

服务账号拥有独立的Drive存储空间,若未将个人Drive中的目标文件夹共享给它,它只能访问自身Drive内的资源。确保目标文件夹已完成共享操作。

内容的提问来源于stack exchange,提问作者Nikhil Karkare

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 17:00:37