如何用Python上传文件夹至Azure Blob Storage并保留目录结构?
上传整个文件夹到Azure Blob Storage并保留目录结构
要实现上传包含所有文件及子文件夹的本地目录,同时完整保留原有结构,你需要递归遍历本地文件系统,为每个文件生成对应Blob路径后逐个上传。以下是完整实现代码和关键说明:
完整代码示例
from azure.storage.blob import ContainerClient import os # 替换为你的Azure存储账户信息 ACCOUNT_NAME = "your_account_name" ACCOUNT_KEY = "your_account_key" CONTAINER_NAME = "your_container_name" LOCAL_FOLDER_PATH = "./target_folder" # 要上传的本地文件夹路径 # 初始化ContainerClient container_client = ContainerClient( account_url=f"https://{ACCOUNT_NAME}.blob.core.windows.net", credential=ACCOUNT_KEY, container_name=CONTAINER_NAME ) # 递归遍历文件夹并上传所有文件 for root, _, files in os.walk(LOCAL_FOLDER_PATH): for file_name in files: # 构建本地文件的完整路径 local_file = os.path.join(root, file_name) # 生成Blob名称:保留相对于本地文件夹的目录结构,替换分隔符适配Blob存储 blob_path = os.path.relpath(local_file, LOCAL_FOLDER_PATH).replace("\\", "/") # 上传文件 with open(local_file, "rb") as file_data: container_client.upload_blob(name=blob_path, data=file_data, overwrite=True) print(f"完成上传: {local_file} -> {blob_path}")
关键细节说明
- 目录结构保留:通过
os.path.relpath获取文件相对于本地文件夹根的相对路径,将该路径直接作为Blob名称,即可在Blob存储中复刻本地的目录层级 - 跨平台兼容:用
.replace("\\", "/")将Windows系统的反斜杠路径分隔符替换为Blob存储使用的正斜杠,确保不同操作系统下都能生成正确的Blob路径 - 覆盖策略:
overwrite=True参数会覆盖Blob存储中已存在的同名文件,若需避免覆盖可移除该参数(重复上传会抛出异常) - 遍历逻辑:
os.walk会递归遍历目标文件夹下的所有子目录和文件,确保没有遗漏任何文件
额外建议
- 如果文件夹包含大量文件,可添加异常捕获逻辑,处理文件读取失败或上传失败的情况
- 对于超大文件,可使用
upload_blob的max_concurrency参数启用分块上传,提升上传效率
内容的提问来源于stack exchange,提问作者Wiliam
相关产品推荐
相关产品推荐

