【问题标题】:Google Drive API How can I find the path of a file?Google Drive API 如何找到文件的路径?
【发布时间】:2019-08-23 00:44:05
【问题描述】:

我在使用 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)

List documentation(提供给 list() 方法的参数)

Files documentation(每个文件返回的属性)

【问题讨论】:

  • 我可以问你你想要的“文件的路径”吗?是否要检索父文件夹 ID?
  • 感谢您的回复。是的。当parents添加到fields时,返回文件的父文件夹ID。在您的情况下,您想要检索文件的文件夹树。我的理解正确吗?
  • 感谢您的回复。我提出了一个示例脚本作为答案。你能确认一下吗?如果我误解了您的问题并且这不是您想要的结果,我深表歉意。
  • 尽量停止考虑文件路径。 Google Drive 是一个平面文件系统,其中“父”只是一个属性,有点像一个标签。一个文件可以有多个父级,因此可以位于多个路径上。
  • @Tanaike 请取消删除您的答案。这是一个很好的答案,将对 OP 有很大帮助。我建议您应该稍微编辑答案以解释 parent[0] 仅在有一个单亲时才有效。如果他有多个路径,OP 可以扩展你的脚本来迭代父母。

标签: python google-api google-drive-api google-api-python-client


【解决方案1】:
  • 您想从自己的 Google Drive 中的文件中检索文件夹树。
    • 您要检索文件路径。因此,在您的情况下,它会检索每个文件和文件夹上方的父文件夹。
  • 您希望使用 google-api-python-client 和 python 来实现此目的。
  • 您已经能够使用 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)

结果:

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

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

注意:

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

参考:

【讨论】:

  • 脚本硬编码parent[0],但可能有多个父级。
  • @pinoyyid 感谢您的评论。是的。我知道。从 OP 想要检索“文件路径”的情况来看,我认为该文件只有一个父文件。所以起初,我确认了这一点,并提出了一个简单的脚本。但是从您的评论来看,我认为我的建议不适合 Google Drive 的文件系统。所以我想删除我的答案。我为我糟糕的技术深表歉意。我认为我必须越来越多地学习。
  • 在 v3 API 中,自 2020 年 9 月起,Google 现在有一个单父模型。所以,@Tanaike,你刚刚走在了曲线的前面;-) 见api/v3/ref-single-parent
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多