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

如何解决PyDrive无法获取Google Drive共享文件夹文件列表并实现下载?

解决PyDrive无法访问“共享给我”的Google Drive文件夹并实现文件下载

问题原因

默认的ListFile查询仅返回你拥有所有权的文件,而“共享给我”的文件夹内的文件所有权不属于你,因此需要调整查询参数和API配置来包含这些共享资源。另外你的认证代码存在冗余,会导致不必要的重复授权操作。

修正后的完整代码

from pydrive.drive import GoogleDrive
from pydrive.auth import GoogleAuth

# 初始化认证,移除冗余代码
gauth = GoogleAuth()
gauth.LoadCredentialsFile("mycreds.txt")

if gauth.credentials is None:
    # 首次认证,启动本地网页授权
    gauth.LocalWebserverAuth()
elif gauth.access_token_expired:
    # 刷新过期的令牌
    gauth.Refresh()
else:
    # 已有有效凭证,直接授权
    gauth.Authorize()

# 保存更新后的凭证
gauth.SaveCredentialsFile("mycreds.txt")

drive = GoogleDrive(gauth)

# 共享文件夹ID
shared_folder_id = "1CNtWRS005fkX6vlZowZiXYITNGifXPKS"

# 调整查询参数:包含共享给我的文件,排除已删除文件
# supportsAllDrives和includeItemsFromAllDrives是访问共享资源的关键参数
file_list = drive.ListFile({
    'q': f"'{shared_folder_id}' in parents and trashed=false and 'me' in readers",
    'supportsAllDrives': True,
    'includeItemsFromAllDrives': True
}).GetList()

# 遍历文件列表并下载
for file in file_list:
    print(f"找到文件: {file['title']} (ID: {file['id']})")
    # 下载文件到本地,文件名使用原文件标题
    file.GetContentFile(file['title'])
    print(f"已下载: {file['title']}")

关键修改说明

  • 冗余认证代码清理:删除了重复的gauth.LoadCredentialsFile和gauth.LocalWebserverAuth调用,避免重复授权流程。
  • 查询参数优化:
    • 添加'me' in readers:确保查询包含你有读取权限的文件(即共享给你的文件)。
    • 添加trashed=false:排除已放入回收站的文件,避免无效结果。
    • 新增supportsAllDrives: True和includeItemsFromAllDrives: True:这两个参数是访问共享驱动器或外部共享文件夹的必要配置,告诉API需要包含非你所有的共享资源。
  • 文件下载实现:使用GetContentFile()方法直接将文件保存到本地,参数为本地保存的文件名(这里直接用原文件标题)。

额外注意事项

  • 确保你的Google账号确实拥有该共享文件夹的读取权限,如果权限不足仍会返回空列表。
  • 如果共享文件夹层级较深,需要递归遍历子文件夹的话,可以在循环中判断文件类型(file['mimeType'] == 'application/vnd.google-apps.folder'),然后递归调用查询逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 00:54:33