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

时间:2019-08-23 00:44:05

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

使用Google云端硬盘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(每个文件返回的属性)

1 个答案:

答案 0 :(得分:2)

  • 您要从自己的Google云端硬盘中的文件中检索文件夹树。
    • 您要检索文件路径。因此,在您的情况下,它将在每个文件和文件夹上方检索一个父文件夹。
  • 您要使用带有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)

结果:

如果文件具有三层结构,则在运行脚本时,将返回以下对象。

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

注意:

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

参考: