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

Python Google Drive API如何找到文件的路径?,python,google-api,google-drive-api,google-api-python-client,Python,Google Api,Google Drive Api,Google Api Python Client,在使用GoogleDrive API获取文件列表时,我试图找到文件的路径 现在,我能够获取文件属性(目前仅获取校验和、id、名称和mimeType): (提供给list()方法的参数) (每个文件返回的属性) 您希望从自己的Google驱动器中的文件检索文件夹树。 您希望检索文件路径。因此,在您的情况下,它会在每个文件和文件夹上方检索父文件夹 您希望通过使用带有python的google api python客户端来实现这一点 您已经能够使用驱动器API获取文件元数据 如果我的理解是正确的

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

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

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

(每个文件返回的属性)

  • 您希望从自己的Google驱动器中的文件检索文件夹树。
    • 您希望检索文件路径。因此,在您的情况下,它会在每个文件和文件夹上方检索父文件夹
  • 您希望通过使用带有python的google api python客户端来实现这一点
  • 您已经能够使用驱动器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的文件系统中,每个文件可以有多个父文件。如果在您的情况下,有多个文件具有多个父级,则此脚本将返回父级数组的第一个元素。请小心这个。这一点我也提到过
参考:
    • 作为另一个示例,有一个用于从Google驱动器检索文件夹树的库
      • 您希望从自己的Google驱动器中的文件检索文件夹树。
        • 您希望检索文件路径。因此,在您的情况下,它会在每个文件和文件夹上方检索父文件夹
      • 您希望通过使用带有python的google api python客户端来实现这一点
      • 您已经能够使用驱动器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的文件系统中,每个文件可以有多个父文件。如果在您的情况下,有多个文件具有多个父级,则此脚本将返回父级数组的第一个元素。请小心这个。这一点我也提到过
      参考:
        • 作为另一个示例,有一个用于从Google驱动器检索文件夹树的库

      我可以问一下您想要的“文件路径”吗?是否要检索父文件夹ID?感谢您的回复。对将
      父文件夹
      添加到
      字段
      时,将返回文件的父文件夹ID。在您的情况下,您希望检索文件的文件夹树。我的理解正确吗?谢谢你的回答。我提出了一个示例脚本作为答案。你能确认一下吗?如果我误解了您的问题,并且这不是您想要的结果,我很抱歉。请尝试停止考虑文件路径。GoogleDrive是一个平面文件系统,其中“parent”只是一个属性,有点像标签。一个文件可以有多个父文件,也可以有多个路径。@Tanaike请取消删除您的答案。这是一个很好的答案,对OP非常有帮助。我建议您对答案稍加修改,以解释
      父项[0]
      仅在单亲情况下有效。如果OP有多个路径,他可以扩展你的脚本来迭代父对象。我可以问你想要的“文件路径”吗?是否要检索父文件夹ID?感谢您的回复。对将
      父文件夹
      添加到
      字段
      时,将返回文件的父文件夹ID。在您的情况下,您希望检索文件的文件夹树。我的理解正确吗?谢谢你的回答。我提出了一个示例脚本作为答案。你能确认一下吗?如果我误解了您的问题,并且这不是您想要的结果,我很抱歉。请尝试停止考虑文件路径。GoogleDrive是一个平面文件系统,其中“parent”只是一个属性,有点像标签。一个文件可以有多个父文件,也可以有多个路径。@Tanaike请取消删除您的答案。这是一个很好的答案,对OP非常有帮助。我建议您对答案稍加修改,以解释
      父项[0]
      仅在单亲情况下有效。如果OP有多个路径,他可以扩展您的脚本以迭代父级。脚本硬编码
      父级[0]
      ,但可能有多个父级。@pinoyyid谢谢您的评论。对我知道。从OP想要检索“文件路径”的情况来看,我认为该文件只有一个父级。因此,首先,我确认了这一点,并提出了一个简单的脚本。但是从你的评论来看,我认为我的建议不适合谷歌硬盘的文件系统。所以我想删除我的答案。我为我的拙劣技能深表歉意。我认为我必须学习越来越多