Python:如何将 Azure Blob 从一个容器移动或复制到另一个容器
Python: How to move or copy Azure Blob from one container to another
我在项目中使用 Microsoft Azure SDK for Python。我想将 Blob 从一个容器移动或复制到另一个容器。例如
https://demostorage.blob.core.windows.net/image-container/pretty.jpg
我想将此 blob 移动到
https://demostorage.blob.core.windows.net/demo-container/
我在python SDK中找到了以下方法,但无法理解。
def copy_blob(self, container_name, blob_name,...):
我该怎么做?谢谢
我这样做过
from azure.storage.blob import BlobService
def copy_azure_files(self):
blob_service = BlobService(account_name='account_name', account_key='account_key')
blob_name = 'pretty.jpg'
copy_from_container = 'image-container'
copy_to_container = 'demo-container'
blob_url = blob_service.make_blob_url(copy_from_container, blob_name)
# blob_url:https://demostorage.blob.core.windows.net/image-container/pretty.jpg
blob_service.copy_blob(copy_to_container, blob_name, blob_url)
#for move the file use this line
blob_service.delete_blob(copy_from_container, blob_name)
我还没有找到任何 Blob Move 方法。所以我使用了复制方法,然后执行Blob函数。
这是我的解决方案。如果你有更好的方法来处理这一切,请与我分享。
注意:我没有使用任何自定义方法所有这些方法都包含在SDK中。
使用最新的Azure Blob Storage SDK。
from azure.storage.blob import BlockBlobService
account_name = "demostorage"
account_key = "lkjASDRwelriJfou3lkjksdfjLj349u9LJfasdjfs/dlkjfjLKSjdfi8ulksjdfAlkjsdfkL762FDSDFSDAfju=="
source_container_name = "image-container"
source_file_path = "pretty.jpg"
target_container_name = "demo-container"
target_file_path = "pretty_copy.jpg"
service = BlockBlobService(account_name, account_key)
service.copy_blob(
target_container_name,
target_file_path,
f"https://{account_name}.blob.core.windows.net/{source_container_name}/{source_file_path}",
)
使用当前版本的 azure-storage-blob(目前为 v12.3.2),您将收到 ImportError:
cannot import name 'BlockBlobService' from 'azure.storage.blob'
此代码适用于我的情况:
from azure.storage.blob import BlobServiceClient
# Azure
# Get this from Settings/Access keys in your Storage account on Azure portal
account_name = "YOUR_AZURE_ACCOUNT_NAME"
connection_string = "YOUR_AZURE_CONNECTION_STRING"
# Source
source_container_name = "sourcecontainer"
source_file_path = "soure.jpg"
blob_service_client = BlobServiceClient.from_connection_string(connection_string)
source_blob = (f"https://{account_name}.blob.core.windows.net/{source_container_name}/{source_file_path}")
# Target
target_container_name = "targetcontainer"
target_file_path = "target.jpg"
copied_blob = blob_service_client.get_blob_client(target_container_name, target_file_path)
copied_blob.start_copy_from_url(source_blob)
# If you would like to delete the source file
remove_blob = blob_service_client.get_blob_client(source_container_name, source_file_path)
remove_blob.delete_blob()
sdk 版本 12.0.0b,他们将 copy_blob 更改为 start_copy_from_url。可以看看here关于方法
这里是关于如何在不下载数据的情况下执行移动机制的快照。
from azure.storage.blob import BlobServiceClient
blob_service_client = BlobServiceClient.from_connection_string(
os.getenv("AZURE_STORAGE_CONNECTION_STRING")
).get_container_client(self.container)
# azure storage sdk does not have _move method
source_blob = blob_service_client.get_blob_client(source_blob_path)
dest_blob = blob_service_client.get_blob_client(dest_blob_path)
dest_blob.start_copy_from_url(source_blob.url, requires_sync=True)
copy_properties = dest_blob.get_blob_properties().copy
if copy_properties.status != "success":
dest_blob.abort_copy(copy_properties.id)
raise Exception(
f"Unable to copy blob %s with status %s"
% (source_blob_path, copy_properties.status)
)
source_blob.delete_blob()
我在项目中使用 Microsoft Azure SDK for Python。我想将 Blob 从一个容器移动或复制到另一个容器。例如
https://demostorage.blob.core.windows.net/image-container/pretty.jpg
我想将此 blob 移动到
https://demostorage.blob.core.windows.net/demo-container/
我在python SDK中找到了以下方法,但无法理解。
def copy_blob(self, container_name, blob_name,...):
我该怎么做?谢谢
我这样做过
from azure.storage.blob import BlobService
def copy_azure_files(self):
blob_service = BlobService(account_name='account_name', account_key='account_key')
blob_name = 'pretty.jpg'
copy_from_container = 'image-container'
copy_to_container = 'demo-container'
blob_url = blob_service.make_blob_url(copy_from_container, blob_name)
# blob_url:https://demostorage.blob.core.windows.net/image-container/pretty.jpg
blob_service.copy_blob(copy_to_container, blob_name, blob_url)
#for move the file use this line
blob_service.delete_blob(copy_from_container, blob_name)
我还没有找到任何 Blob Move 方法。所以我使用了复制方法,然后执行Blob函数。
这是我的解决方案。如果你有更好的方法来处理这一切,请与我分享。
注意:我没有使用任何自定义方法所有这些方法都包含在SDK中。
使用最新的Azure Blob Storage SDK。
from azure.storage.blob import BlockBlobService
account_name = "demostorage"
account_key = "lkjASDRwelriJfou3lkjksdfjLj349u9LJfasdjfs/dlkjfjLKSjdfi8ulksjdfAlkjsdfkL762FDSDFSDAfju=="
source_container_name = "image-container"
source_file_path = "pretty.jpg"
target_container_name = "demo-container"
target_file_path = "pretty_copy.jpg"
service = BlockBlobService(account_name, account_key)
service.copy_blob(
target_container_name,
target_file_path,
f"https://{account_name}.blob.core.windows.net/{source_container_name}/{source_file_path}",
)
使用当前版本的 azure-storage-blob(目前为 v12.3.2),您将收到 ImportError:
cannot import name 'BlockBlobService' from 'azure.storage.blob'
此代码适用于我的情况:
from azure.storage.blob import BlobServiceClient
# Azure
# Get this from Settings/Access keys in your Storage account on Azure portal
account_name = "YOUR_AZURE_ACCOUNT_NAME"
connection_string = "YOUR_AZURE_CONNECTION_STRING"
# Source
source_container_name = "sourcecontainer"
source_file_path = "soure.jpg"
blob_service_client = BlobServiceClient.from_connection_string(connection_string)
source_blob = (f"https://{account_name}.blob.core.windows.net/{source_container_name}/{source_file_path}")
# Target
target_container_name = "targetcontainer"
target_file_path = "target.jpg"
copied_blob = blob_service_client.get_blob_client(target_container_name, target_file_path)
copied_blob.start_copy_from_url(source_blob)
# If you would like to delete the source file
remove_blob = blob_service_client.get_blob_client(source_container_name, source_file_path)
remove_blob.delete_blob()
sdk 版本 12.0.0b,他们将 copy_blob 更改为 start_copy_from_url。可以看看here关于方法
这里是关于如何在不下载数据的情况下执行移动机制的快照。
from azure.storage.blob import BlobServiceClient
blob_service_client = BlobServiceClient.from_connection_string(
os.getenv("AZURE_STORAGE_CONNECTION_STRING")
).get_container_client(self.container)
# azure storage sdk does not have _move method
source_blob = blob_service_client.get_blob_client(source_blob_path)
dest_blob = blob_service_client.get_blob_client(dest_blob_path)
dest_blob.start_copy_from_url(source_blob.url, requires_sync=True)
copy_properties = dest_blob.get_blob_properties().copy
if copy_properties.status != "success":
dest_blob.abort_copy(copy_properties.id)
raise Exception(
f"Unable to copy blob %s with status %s"
% (source_blob_path, copy_properties.status)
)
source_blob.delete_blob()