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

PyDrive调用Google Drive API获取自身及共享非已删除文件问题

解决PyDrive获取Google Drive有效文件(含共享文件)的问题

我之前用PyDrive对接Google Drive API的时候也踩过这个坑!你遇到的问题其实是因为Google Drive的trashed属性只针对你自己拥有的文件——当你把自己的文件移到回收站,trashed会变成true;但如果是别人共享给你的文件,不管是对方把它删了,还是你把它从自己的驱动器里移除,这个文件的trashed属性依然是false,所以单纯用trashed=false过滤不掉这些无效的共享文件。

要获取你自己的未删除文件 + 他人共享给你且仍然可用的文件,你需要调整查询条件,把两种情况都覆盖到:

正确的查询代码

return self.g_drive.ListFile({
    'q': 'trashed=false and ( "me" in owners or (sharedWithMe=true and not "me" in owners) )'
}).GetList()

这个查询语句的逻辑是:

  • 筛选所有未被标记为已删除的文件
  • 同时满足以下两个条件之一:
    1. 文件是你自己拥有的("me" in owners)
    2. 文件是别人共享给你的,且你不是所有者(sharedWithMe=true and not "me" in owners)

额外优化:过滤不可访问的共享文件

如果有些共享文件已经被所有者删除或取消了共享权限,你可能还是会拿到一些无法访问的条目。这时候可以加上visibility='visible'参数,确保只返回你能正常访问的文件:

return self.g_drive.ListFile({
    'q': 'trashed=false and ( "me" in owners or (sharedWithMe=true and not "me" in owners) )',
    'visibility': 'visible'
}).GetList()

验证排查

如果你想确认返回的文件是否符合预期,可以打印文件的关键属性来排查:

files = self.g_drive.ListFile(...).GetList()
for file in files:
    print(f"文件名: {file['title']}, 所有者: {file['owners'][0]['emailAddress']}, 共享给我: {file.get('sharedWithMe', False)}, 已删除: {file['trashed']}")

这样就能清楚看到每个文件的状态,确认是否都是你需要的有效文件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:13:44