使用Python在Azure ADLS Gen2中实现容器内文件移动/复制
在Azure ADLS Gen2同一容器内复制文件
首先确保安装Azure存储SDK:
pip install azure-storage-file-datalake
以下是同一容器内复制文件的Python代码,支持保留原文件名:
from azure.storage.filedatalake import DataLakeServiceClient def copy_file_between_folders(connection_string, container_name, source_folder, dest_folder, file_name): # 初始化服务客户端 service_client = DataLakeServiceClient.from_connection_string(connection_string) # 获取容器客户端 container_client = service_client.get_file_system_client(file_system=container_name) # 构建源文件和目标文件的路径 source_file_path = f"{source_folder}/{file_name}" dest_file_path = f"{dest_folder}/{file_name}" # 获取源文件客户端 source_file_client = container_client.get_file_client(source_file_path) # 复制文件到目标路径 dest_file_client = container_client.get_file_client(dest_file_path) dest_file_client.copy_from_url(source_file_client.url) print(f"文件 {file_name} 已从 {source_folder} 复制到 {dest_folder}") # 使用示例 if __name__ == "__main__": # 替换为你的实际配置 CONNECTION_STRING = "你的Azure存储账户连接字符串" CONTAINER_NAME = "目标容器名" SOURCE_FOLDER = "processed_files" # 容器内的源文件夹路径 DEST_FOLDER = "archived_files" # 容器内的目标文件夹路径 FILE_NAME = "data_2024.csv" # 要复制的文件名 copy_file_between_folders(CONNECTION_STRING, CONTAINER_NAME, SOURCE_FOLDER, DEST_FOLDER, FILE_NAME)
如果需要移动文件(复制后删除原文件),可在复制完成后添加删除逻辑:
# 在复制成功后执行删除 source_file_client.delete_file() print(f"原文件 {file_name} 已从 {source_folder} 删除")
关键注意事项
- 确保账户拥有
Storage Blob Data Contributor或更高权限,否则会触发权限错误 - 路径为容器内相对路径,无需包含容器名,例如
folder/subfolder而非container/folder/subfolder - 目标文件夹不存在时,ADLS Gen2会自动创建对应目录结构
- 批量复制可遍历源文件夹的文件列表,循环调用上述函数
内容的提问来源于stack exchange,提问作者rania
相关产品推荐
相关产品推荐

