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

如何通过ADF将Azure Blob不同文件夹下同名最新文件移至单文件夹

实现Azure Blob存储同名文件最新版本归集到单一文件夹

前提准备

首先安装Azure Blob存储的Python SDK:

pip install azure-storage-blob

核心代码实现

以下代码会扫描指定路径下所有文件,按文件名分组后筛选出最新修改的版本,将其移动到目标文件夹(移动操作通过复制+删除源文件实现,Azure Blob无原生移动API):

from azure.storage.blob import BlobServiceClient
import time

# 替换为你的存储账户信息
CONNECTION_STRING = "你的Azure存储账户连接字符串"
CONTAINER_NAME = "目标容器名称"
SOURCE_PREFIX = "Main_folder/Folder_X/"  # 要扫描的根路径(所有子文件夹都会被遍历)
TARGET_BASE_PATH = "Main_folder/"  # 最终文件存放的目标路径

# 初始化客户端
blob_service_client = BlobServiceClient.from_connection_string(CONNECTION_STRING)
container_client = blob_service_client.get_container_client(CONTAINER_NAME)

# 按文件名分组,存储每个文件的所有版本信息
file_version_map = {}

# 遍历所有符合前缀的Blob
for blob in container_client.list_blobs(name_starts_with=SOURCE_PREFIX):
    file_name = blob.name.split("/")[-1]
    if file_name not in file_version_map:
        file_version_map[file_name] = []
    file_version_map[file_name].append({
        "last_modified": blob.last_modified,
        "blob_path": blob.name
    })

# 处理每个文件的版本,移动最新版到目标路径
for filename, versions in file_version_map.items():
    # 按修改时间倒序排序,取第一个即为最新版本
    latest_version = sorted(versions, key=lambda x: x["last_modified"], reverse=True)[0]
    source_blob_path = latest_version["blob_path"]
    target_blob_path = f"{TARGET_BASE_PATH}{filename}"

    # 复制最新Blob到目标位置
    source_blob_client = container_client.get_blob_client(source_blob_path)
    target_blob_client = container_client.get_blob_client(target_blob_path)
    
    # 启动复制任务
    copy_operation = target_blob_client.start_copy_from_url(source_blob_client.url)
    
    # 等待复制完成(大文件需适当延长等待间隔)
    while target_blob_client.get_blob_properties().copy.status == "pending":
        time.sleep(2)

    # 删除源Blob(若需保留源文件可注释此步骤)
    source_blob_client.delete_blob()

    print(f"完成:最新版 {filename} 已从 {source_blob_path} 移动到 {target_blob_path}")

关键说明

  • 权限要求:确保执行代码的身份拥有Blob存储的Contributor或更高权限
  • 覆盖逻辑:若目标路径已存在同名文件,复制操作会直接覆盖,如需避免覆盖可在复制前检查目标Blob是否存在
  • 时区注意:Blob的last_modified属性为UTC时间,若需与本地时间对比,需自行做时区转换
  • 大文件处理:针对大文件,可考虑使用异步复制或增加等待时间,避免复制未完成就执行删除操作

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 00:55:12