我有一個問題,我無法找到正確的檔案來解決它,也無法得到任何好的路徑來遵循。
我有幾個azure存盤容器,它們有多個容器和blobs。
我正在嘗試回圈瀏覽每個存盤賬戶,并獲得其容器的串列,以便我可以將它們復制到另一個存盤賬戶作為備份。
昨天,在社區的幫助下,我能夠實作從存盤賬戶到存盤賬戶的復制,如下所示:
。from azure.store.blob import BlobClient, BlobServiceClient, ContainerClient
from azure.storage.blob import ResourceTypes, AccountSasPermissions
from azure.storage.blob import generate_account_sas
from datetime import *
#================================ SOURCE ===============================
# Source Client
connection_string = '' # The connection string for the source container
account_key = '' # 源容器的賬戶密鑰。
source_container_name = '' # 有待復制的blob的容器的名稱。
blob_name = '' # 你要復制的blob的名稱。
# 創建客戶端 # 創建客戶端
client = BlobServiceClient.from_connection_string(connection_string)
# Create sas token for blob
sas_token = generate_account_sas(
account_name = client.account_name,
account_key = account_key,
resource_types = ResourceTypes(object=True, container=True)。
permission= AccountSasPermissions(read=True,list=True) 。
# start = datetime.now(),
expiry = datetime.utcnow() timedelta(hours=4) # Token有效期為4小時。
)
# Create blob client for source blob
source_blob = BlobClient(
client.url,
container_name = source_container_name,
blob_name = blob_name,
credential = sas_token
)
# ============================= TARGET =======================================
# target client
target_connection_string = ''/span>
target_account_key = ''/span>
source_container_name = source_container_name
target_blob_name = ''
target_destination_blob = ''/span>
# Create target client
target_client = BlobServiceClient.from_connection_string(target_connection_string)
container = ContainerClient.from_connection_string(target_connection_string, target_destination_blob)
# 創建新的blob并開始復制操作。
# new_blob = client.get_blob_client(destination_container_name, blob_name)
new_blob = target_client.get_blob_client(target_destination_blob, target_blob_name)
new_blob.start_copy_from_url(source_blob.url)
這段代碼運行良好,但正如您所看到的,我必須對容器和 blob 名稱進行硬編碼。
我想做的是遍歷特定存盤帳戶中的所有容器,并開始將內容復制到另一個存盤帳戶的相同位置。
https://github.com/Azure/azure-storage-python/issues/389
但我不能克服這個問題。
我通過使用庫from azure.cosmosdb.table.tableservice import TableService,ListGenerator
所以我想知道是否有人可以幫助我了解有什么庫可以幫助實作這一點。如果你能為我提供任何幫助,請提前感謝你。
更新:
all_containers = client.list_containers(include_metadata=True)
for container in all_containers:
print(container['name'], container['metadata'] )
container_client = BlobServiceClient.get_container_client(container['name'] )
blobs_list = container_client.list_blobs()
for blob in blobs_list:
print(blob.name '
')
uj5u.com熱心網友回復:
你會想要使用Azure Storage Blobs client library for Python。
為了列出容器,您需要在blob服務客戶端物件上使用list_containers方法。
all_containers = client.list_containers(include_metadata=True)
for container in all_containers:
print(container['name'], container['metadata'] )
然后使用container['name'],你將創建一個ContainerClient的實體。一旦你有了這個實體,你需要做的就是呼叫list_blobs方法來列出該容器中的 blobs。
blobs_list = container_client.list_blobs()
for blob in blobs_list:
print(blob.name '
')
UPDATE
請嘗試下面的代碼。它將列出一個存盤賬戶中的所有容器和其中的blob,并列印容器名稱和blob名稱。
from azure.store.blob import BlobServiceClient
connection_string = "DefaultEndpointsProtocol=https;AccountName=accountname;AccountKey=accountkey"/span>
client = BlobServiceClient.from_connection_string(connection_string)
all_containers = client.list_containers(include_metadata=True)
for container in all_containers:
print(container['name'], container['metadata'] )
print("==========================")
container_client = client.get_container_client(container.name)
print(container_client)
blobs_list = container_client.list_blobs()
for blob in blobs_list:
print(blob.name)
print("==========================")
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/326090.html
標籤:
