You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何使用PyDrive获取Google Drive中的所有文件夹?

仅用PyDrive获取Google Drive所有层级文件夹的方法

当然可以!PyDrive的ListFile方法支持通过q参数结合Google Drive的文件属性进行精准过滤,我们只需要针对文件夹的MIME类型来筛选,就能轻松排除普通文件,只返回文件夹(包括根目录、父文件夹、所有子文件夹)。

1. 基础:获取根目录下的所有文件夹

文件夹在Google Drive中的MIME类型是application/vnd.google-apps.folder,我们把这个作为过滤条件传入q参数即可:

# 假设你已经完成了PyDrive的授权初始化,self.drive是已实例化的GoogleDrive对象
root_folders = self.drive.ListFile({
    'q': "mimeType='application/vnd.google-apps.folder' and trashed=false"
}).GetList()

# 遍历输出根目录下的文件夹名称
for folder in root_folders:
    print(f"根目录文件夹: {folder['title']}")

这里的trashed=false是可选但推荐的,它会帮你排除已经被移入回收站的文件夹,如果不需要这个过滤可以直接去掉。

2. 进阶:递归获取所有层级的文件夹(含子文件夹)

如果需要获取所有嵌套的子文件夹,我们需要写一个递归函数,遍历每个文件夹并查询它的子目录:

def fetch_all_folders(drive, parent_folder_id='root'):
    # 构建查询条件:指定父文件夹下的所有未删除文件夹
    query = (
        f"mimeType='application/vnd.google-apps.folder' "
        f"and trashed=false "
        f"and '{parent_folder_id}' in parents"
    )
    current_folders = drive.ListFile({'q': query}).GetList()
    
    all_folders = []
    for folder in current_folders:
        # 记录当前文件夹的信息(名称、ID、父ID)
        folder_detail = {
            'name': folder['title'],
            'folder_id': folder['id'],
            'parent_id': parent_folder_id
        }
        all_folders.append(folder_detail)
        
        # 递归查询当前文件夹的子文件夹
        all_folders.extend(fetch_all_folders(drive, folder['id']))
    
    return all_folders

# 调用函数获取所有层级的文件夹
all_folders_list = fetch_all_folders(self.drive)

# 输出所有文件夹名称
for item in all_folders_list:
    print(f"文件夹名称: {item['name']}")

这个递归函数会从根目录开始,逐层遍历每个文件夹的子目录,最终返回所有层级的文件夹列表,完全满足你获取根目录、父文件夹、子文件夹的需求。

内容的提问来源于stack exchange,提问作者r1299597

火山引擎 最新活动