gpt4 book ai didi

python - 在 Python 中处理 Azure blob 删除客户端中 Blob 不存在场景的异常

转载 作者:行者123 更新时间:2023-12-02 08:21:24 30 4
gpt4 key购买 nike

我的容器中有数千个 blob,并且有一个从某个数据库获取的要删除的 blob 列表。

现在,无法保证列表中存在的 ID/名称也存在于 Blob 中。所以想做一个deleteIfExist 类型的场景并且

当 blob 不存在时抛出的错误不是:azure.core.exceptions.ResourceNotFoundError:我可以为其编写异常 block 的操作。

它会抛出一些通用信息,例如:azure.storage.blob._shared.response_handlers.PartialBatchErrorException:批处理操作中出现部分失败。

代码如下:

from azure.storage.blob import BlobServiceClient
blob_service_client = BlobServiceClient.from_connection_string(conn_str_for_list)
container="name1-entity"
# Instantiate a ContainerClient
container_client = blob_service_client.get_container_client(container)

file_name = "something.txt"
fileobj = open(file_name, "r")
entityIdsList = [line.rstrip() for line in fileobj]
fileobj.close()

blobs_list = entitysChunk
print(blobs_list)

blobs_length = len(blobs_list)
# container_client.delete_blobs(*blobs_list)
if blobs_length <= 256:
container_client.delete_blobs(*blobs_list)

else:
start = 0
end = 256

while end <= blobs_length:
# each time, delete 256 blobs at most
container_client.delete_blobs(*blobs_list[start:end])
start = start + 256
end = end + 256
if start < blobs_length and end > blobs_length:
container_client.delete_blobs(*blobs_list[start:blobs_length])

最佳答案

看一下下面的代码:

from azure.storage.blob import BlobServiceClient,PartialBatchErrorException
conn_str_for_list = "connection-string"
blob_service_client = BlobServiceClient.from_connection_string(conn_str_for_list)
container="blob-container-name"

container_client = blob_service_client.get_container_client(container)

file_name = "blobs.txt"
fileobj = open(file_name, "r")
entityIdsList = [line.rstrip() for line in fileobj]
fileobj.close()

blobs_list = entityIdsList

print(blobs_list)

try:
result = container_client.delete_blobs(*blobs_list)
for item in result:
print(item.status_code)
except PartialBatchErrorException as e:
print(e.message)
print("-----------------------")
print(e.response)
print("-----------------------")
print(e.parts)
print("-----------------------")
for part in e.parts:
if (part.status_code == 202):
print("Blob delete request was accepted.")
elif (part.status_code == 404):
print("Blob does not exist. Consider it deleted.")
else:
print("Something else happened. You better take a look at it.")
print(part)
print("==============================")

基本上只要出现 PartialBatchErrorException 类型的异常,它的 parts 属性将包含有关批处理中每个操作的结果的详细信息。您可以检查每个操作的状态代码以确定其是成功(状态代码 202)还是失败(其他状态代码)。如果状态代码为 404(未找到),则可以假设该 blob 不存在。

关于python - 在 Python 中处理 Azure blob 删除客户端中 Blob 不存在场景的异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68129200/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com