如何使用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




