Google Drive API 如何找到文件的路径?

www*_*139 1 python google-api google-drive-api google-api-python-client

在使用 Google Drive API 获取文件列表时,我试图找到文件的路径。

现在,我能够获取文件属性(目前只获取校验和、id、名称和 mimeType):

results = globalShares.service.files().list(pageSize=1000,corpora='user',fields='nextPageToken, files(md5Checksum, id, name, mimeType)').execute()
items = results.get('files',[])
nextPageToken = results.get('nextPageToken',False)
for file in items:
    print("===========================================================")
    pp.pprint(file)
print(str(len(items)))
print(nextPageToken)
Run Code Online (Sandbox Code Playgroud)

列表文档(提供给 list() 方法的参数)

文件文档(每个文件返回的属性)

Tan*_*ike 6

  • 您想从自己的 Google Drive 中的文件中检索文件夹树。
    • 您要检索文件路径。因此,在您的情况下,它会检索每个文件和文件夹上方的父文件夹。
  • 您想使用带有 python 的 google-api-python-client 来实现这一点。
  • 您已经能够使用 Drive API 获取文件元数据。

如果我的理解是正确的,这个示例脚本怎么样?遗憾的是,在当前阶段,Google API 无法直接检索文件的文件夹树。所以需要准备一个脚本来实现它。请将此视为几个答案之一。

示例脚本:

此示例脚本检索文件的文件夹树。使用本脚本时,请设置文件ID。

fileId = '###'  # Please set the file ID here.

tree = []  # Result
file = globalShares.service.files().get(fileId=fileId', fields='id, name, parents').execute()
parent = file.get('parents')
if parent:
    while True:
        folder = service.files().get(
            fileId=parent[0], fields='id, name, parents').execute()
        parent = folder.get('parents')
        if parent is None:
            break
        tree.append({'id': parent[0], 'name': folder.get('name')})

print(tree)
Run Code Online (Sandbox Code Playgroud)

结果:

在文件为三层结构的情况下,运行脚本时,返回如下对象。

[
  {
    "id": "folderId3",
    "name": "folderName3"
  },
  {
    "id": "folderId2",
    "name": "folderName2"
  },
  {
    "id": "folderId1",
    "name": "My Drive"  # This is the root folder.
  }
]
Run Code Online (Sandbox Code Playgroud)
  • 第一个元素是底层。

笔记:

  • 在这个脚本中,从 OP 想要检索“文件路径”的情况来看,它假设每个文件只有一个父文件。在 Google Drive 的文件系统中,每个文件可以有多个父文件。如果在您的情况下,有多个文件具有多个父项,则此脚本将返回parents. 请注意这一点。pinoyyid的评论也提到了这一点。

参考:

  • 在 v3 API 中,自 2020 年 9 月起,Google 现在拥有单父模型。所以,@Tanaike,你就走在了前面;-) 请参阅 [api/v3/ref-single-parent](https://developers.google.com/drive/api/v3/ref-single-parent) (5认同)
  • 该脚本对“parent[0]”进行了硬编码,但可能有多个父级。 (2认同)
  • @pinoyyid 感谢您的评论。是的。我知道这。从OP想要检索“文件路径”的情况来看,我认为该文件只有一个父文件。所以一开始我确认了这一点并提出了一个简单的脚本。但从你的评论来看,我认为我的建议不适合Google Drive的文件系统。所以我想删除我的答案。对于我的拙劣技术,我深表歉意。我想我必须越来越多地学习。 (2认同)