文件夹中的文件列表/ DRIVE API PyDRIVE

Posted

技术标签:

【中文标题】文件夹中的文件列表/ DRIVE API PyDRIVE【英文标题】:List of file in a folder/ DRIVE API PyDRIVE 【发布时间】:2016-10-24 17:55:22 【问题描述】:

我无法更改文件夹并查看里面的内容。

drive = GoogleDrive(gauth)
file_list = drive.ListFile('q': "'root' in parents and trashed=false").GetList()
for file1 in file_list:
print("File %s\n\n",(file1))

我使用了以下代码:

file_list = drive.ListFile('q': "'/test1' in parents and trashed=false").GetList()

但它不起作用。 有我使用的函数的文档:https://developers.google.com/drive/v3/reference/files/list

【问题讨论】:

请详细说明这部分:'但它不起作用'。它不工作究竟如何??您是否收到任何错误消息?如果是,请在您的问题中包含确切回溯。 googleapis.com/drive/v2/… returned "File not found:"> 【参考方案1】:

您必须插入文件夹 ID 而不是其路径。您可以通过不同的方式获取 ID:

    使用 PyDrive:如果列出根目录下的所有文件夹,则可以列出所有文件夹名称及其各自的 ID。 使用 Web 界面:导航到要从中获取 ID 的文件夹。看看网址,它有这样的格式:drive.google.com/drive/u/0/folders/<folder ID>

现在将文件夹 ID 插入到请求中。

file_list = drive.ListFile('q': "'<folder ID>' in parents and trashed=false").GetList()

仅供参考:Google Drive 是一种基于标签(也称为语义)的文件系统,例如,它允许文件同时位于多个位置(只需将文件夹的 ID 添加到文件的 parents属性)。

【讨论】:

【参考方案2】:

以下是打印 Google 驱动器的两个完整工作示例 带有pydrive 的文件结构 - 遵循代码中的 cmets。


示例 1 - pydrive 的基本用法和打印***文件夹

from pydrive.auth import GoogleAuth
from pydrive.drive import GoogleDrive

gauth = GoogleAuth()
gauth.LocalWebserverAuth()
drive = GoogleDrive(gauth)

# 1) Choose your starting point by inserting file name
folder_title = "your-starting-point-folder"
folder_id = ''

# 2) Retrieve the folder id - start searching from root
file_list = drive.ListFile('q': "'root' in parents and trashed=false").GetList()
for file in file_list:
    if(file['title'] == folder_title):
        folder_id = file['id']
        break

# 3) Build string dynamically (need to use escape characters to support single quote syntax)
str = "\'" + folder_id + "\'" + " in parents and trashed=false"    

# 4) Starting iterating over files
file_list = drive.ListFile('q': str).GetList()
for file in file_list:
    print('title: %s, id: %s' % (file['title'], file['id']))

示例 2 - 递归打印所有文件结构

我使用了一个名为 treelib 的树可视化库。

from treelib import Node, Tree

from pydrive.auth import GoogleAuth
from pydrive.drive import GoogleDrive

gauth = GoogleAuth()
gauth.LocalWebserverAuth()
drive = GoogleDrive(gauth)


### Some basic helper functions ### 
def get_children(root_folder_id):
    str = "\'" + root_folder_id + "\'" + " in parents and trashed=false"
    file_list = drive.ListFile('q': str).GetList()
    return file_list

def get_folder_id(root_folder_id, root_folder_title):
    file_list = get_children(root_folder_id)
    for file in file_list:
        if(file['title'] == root_folder_title):
            return file['id']

def add_children_to_tree(tree, file_list, parent_id):
    for file in file_list:
        tree.create_node(file['title'], file['id'], parent=parent_id)
        # For debugging
        # print('parent: %s, title: %s, id: %s' % (parent_id, file['title'], file['id']))

### Go down the tree until you reach a leaf ###
def populate_tree_recursively(tree,parent_id):
    children = get_children(parent_id)
    add_children_to_tree(tree, children, parent_id)
    if(len(children) > 0):
        for child in children:
            populate_tree_recursively(tree, child['id'])


### Create the tree and the top level node ###
def main():
    root_folder_title = "my-top-level-root-folder-name"
    root_folder_id = get_folder_id("root", root_folder_title)

    tree = Tree()
    tree.create_node(root_folder_title, root_folder_id)
    populate_tree_recursively(tree, root_folder_id)
    tree.show()

if __name__ == "__main__":
    main()

【讨论】:

【参考方案3】:

我认为https://***.com/a/47764444/1003629 解决了类似的问题,应该可以帮助您。这里的问题是对所需文件夹的权限,默认情况下只有根。

【讨论】:

【参考方案4】:

请参考 google drive api 文档 - https://developers.google.com/drive/api/v2/search-files

根据您的要求替换 search_term:

示例:搜索具有名称的文件/文件夹

file_list = drive.ListFile('q': " title='' ").GetList()

'单引号是api请求的一部分)

【讨论】:

以上是关于文件夹中的文件列表/ DRIVE API PyDRIVE的主要内容,如果未能解决你的问题,请参考以下文章

React-native Google Drive如何获取文件和文件夹列表?

Node JS Google Drive api方法列表返回已删除文件

如何在Google Drive API上按文件夹获取文件列表

Google Drive API无法找到任何文件夹

为什么G-Drive没有返回我的文件列表?

从 Google Drive V3 API 中的回收站恢复文件时未设置时间戳