Azure ADLS - 使用 Python 列出 Blobs get OSError("(10054, \'WASECONNRESET\')



我收到错误:无法流式下载

该容器包含大量文件。请告诉我如何在指定的容器中列出blob名称。

SAS令牌/URL具有特权:READ&LIST&写入如果你想了解更多信息,请告诉我,谢谢。

Q1.错误:无法流式下载

from azure.storage.blob import ContainerClient 
sas_url="https://[account].blob.core.windows.net/[container]?[SAS_Token]"  
container=ContainerClient.from_container_url(sas_url) 
blob_list=container.list_blobs()
for blob in blob_list:
print(blob.name+'n')

我想在[container]下的sub_folder='abc/def/ghi'中列出Blob。提前谢谢。

Q2.我尝试过SAS URL方法,但得到了一个错误:请求的URI不代表服务器上的任何资源。

from azure.storage.blob import BlobServiceClient, BlobClient, ContainerClient
def azure_connect_sas_url(source_container_sas_url, source_container_name):
try:
blob_source_service_client = BlobServiceClient(source_container_sas_url)
source_container_client = blob_source_service_client.get_container_client(source_container_name)
print ("SAS URL -- Connected.")
return source_container_client
except Exception as ex:
print ("Error: " + str(ex))
def main():
try:
azure_sas_url = 'https://[account].blob.core.windows.net/[container]?[SAS_Token]'
container_name = 'abc/def/ghi'
## SAS URL
connection_instance = azure_connect_sas_url(azure_sas_url, container_name)
source_blob_list=connection_instance.list_blobs()

for blob in source_blob_list:
print (blob.name + 'n')

except Exception as ex:
print ('main | Error: ', ex)
if __name__ == "__main__":
main()

main |错误:请求的URI不代表服务器上的任何资源。错误代码:无效URi

代码的问题是混淆了虚拟目录路径和容器名称。容器名称已包含在您的SAS URL中。

您只需使用该SAS URL并使用from_container_url方法创建一个ContainerClient实例。目录路径('abc/def/ghi'(应作为参数传递给list_blobs方法。

azure_sas_url = 'https://[account].blob.core.windows.net/[container]?[SAS_Token]'
container_client = ContainerClient.from_container_url(azure_sas_url)
source_blob_list = container_client.list_blobs(name_starts_with='abc/def/ghi')
for blob in source_blob_list:
print (blob.name + 'n')

相关内容

最新更新