You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 22:40:44