如何使用Python重命名Azure存储资源管理器中的现有Blob
Python重命名Azure Blob文件的正确方法
你之前的代码用的是旧版Azure Storage SDK(v2.x)的API,现在官方已经废弃了这些接口,改用v12+的新SDK,所以找不到blob_service和BlockBlobService。下面是基于最新SDK的实现步骤:
1. 安装最新的Azure Blob存储SDK
pip install azure-storage-blob
2. 重命名Blob的代码实现
Azure Blob没有原生的重命名接口,标准流程是复制源Blob到新名称,再删除原Blob,代码示例如下:
from azure.storage.blob import BlobServiceClient import time # 替换为你的存储账户连接字符串 connection_string = "DefaultEndpointsProtocol=https;AccountName=你的存储账户名;AccountKey=你的账户密钥;EndpointSuffix=core.windows.net" # 容器名称(对应你代码里的cloudops-resources) container_name = "cloudops-resources" # 源Blob的完整名称(包含路径前缀,比如outputs/abc.xlsx) source_blob_name = "outputs/abc.xlsx" # 重命名后的Blob名称 target_blob_name = "outputs/xyz.xlsx" # 初始化Blob服务客户端 blob_service_client = BlobServiceClient.from_connection_string(connection_string) # 获取源Blob和目标Blob的客户端对象 source_blob_client = blob_service_client.get_blob_client(container=container_name, blob=source_blob_name) target_blob_client = blob_service_client.get_blob_client(container=container_name, blob=target_blob_name) # 发起复制操作 copy_result = target_blob_client.start_copy_from_url(source_blob_client.url) # 等待复制完成(大文件需要等待,小文件可省略此步骤) while copy_result['copy_status'] not in ['success', 'failed']: copy_result = target_blob_client.get_blob_properties().copy time.sleep(1) # 复制成功后删除原Blob if copy_result['copy_status'] == 'success': source_blob_client.delete_blob() print("Blob重命名完成") else: print(f"复制失败,状态: {copy_result['copy_status']}")
关键说明
- 区分容器和Blob名称:你之前的
sourcePath里的cloudops-resources是容器名,outputs/属于Blob名称的路径前缀(Azure Blob没有真正的文件夹,只是用路径分隔符模拟) - 复制操作是异步的,所以需要等待复制状态变为
success后再删除原Blob - 如果不需要保留原Blob,复制完成后一定要执行删除操作,否则会存在两个相同的Blob
内容的提问来源于stack exchange,提问作者Asu
相关产品推荐
相关产品推荐

