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()
这个查询语句的逻辑是:
- 筛选所有未被标记为已删除的文件
- 同时满足以下两个条件之一:
- 文件是你自己拥有的(
"me" in owners) - 文件是别人共享给你的,且你不是所有者(
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
相关产品推荐
相关产品推荐

