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
相关产品推荐
相关产品推荐

