如何用Python访问Dropbox子文件夹文件并实现下载?
我来帮你解决这个问题!你现在已经能获取根目录的文件夹了,接下来要做的就是遍历子文件夹并识别下载文件,用Dropbox Python SDK其实很容易实现。我给你一步步拆解并附上完整代码:
第一步:完善目录条目获取(处理分页)
你原来的files_list_folder('')只获取了第一页内容,如果文件夹/文件数量较多会漏掉条目,所以先补充分页处理逻辑:
import dropbox # 初始化dbx(假设你已完成授权,这里省略授权代码) dbx = dropbox.Dropbox('你的访问令牌') def get_all_entries(path): entries = [] result = dbx.files_list_folder(path) entries.extend(result.entries) # 处理分页,拉取所有条目 while result.has_more: result = dbx.files_list_folder_continue(result.cursor) entries.extend(result.entries) return entries # 获取根目录所有条目 root_entries = get_all_entries('')
第二步:递归遍历文件夹并下载文件
写一个递归函数,自动识别当前路径下的文件夹/文件:遇到文件夹就深入遍历,遇到文件就下载到本地指定路径。
import os def download_files_from_path(dbx, dropbox_path, local_save_path): # 确保本地保存目录存在,不存在则创建 os.makedirs(local_save_path, exist_ok=True) # 获取当前Dropbox路径下的所有条目 entries = get_all_entries(dropbox_path) for entry in entries: # 判断是否为文件夹,是则递归处理子文件夹 if isinstance(entry, dropbox.files.FolderMetadata): sub_dropbox_path = entry.path_display sub_local_path = os.path.join(local_save_path, entry.name) download_files_from_path(dbx, sub_dropbox_path, sub_local_path) # 判断是否为文件,是则下载到本地 elif isinstance(entry, dropbox.files.FileMetadata): local_file_path = os.path.join(local_save_path, entry.name) dbx.files_download_to_file(local_file_path, entry.path_display) print(f"已完成下载:{entry.name} -> {local_file_path}")
第三步:调用函数启动下载
比如你要下载根目录下名为"项目文档"的子文件夹内容,直接指定路径调用即可:
# Dropbox目标文件夹路径(注意以/开头) target_dropbox_folder = "/项目文档" # 本地保存的根路径 local_root = "./dropbox_downloads" download_files_from_path(dbx, target_dropbox_folder, local_root)
关键细节说明
isinstance(entry, dropbox.files.FolderMetadata):这是区分文件夹和文件的核心判断,确保我们能正确遍历层级files_download_to_file():直接将Dropbox文件下载到本地指定路径,比返回字节流的files_download()更适合直接存文件的场景- 分页处理:避免因条目数量超过API单次返回上限导致漏获取内容,这是很多开发者容易忽略的点
- 本地目录自动创建:用
os.makedirs(..., exist_ok=True)确保下载路径存在,不会因目录缺失报错
内容的提问来源于stack exchange,提问作者F128115
相关产品推荐
相关产品推荐

