如何解决无法列出 Azure 容器中的 blob
我想列出 Azure 容器中的 blob(文件)。为此,我完全复制了官方文档 (see here) 中作为示例给出的代码片段。这是我的代码的样子:
from azure.storage.blob import BlobServiceClient,ContainerClient
from azure.identity import ClientSecretCredential
token_credential = ClientSecretCredential(tenant_id='WWW',client_id='XXX',client_secret='YYY')
service = BlobServiceClient("ZZZ",credential=token_credential)
container_client = service.get_container_client(container='AAA')
print(container_client.container_name)
blob_list = container_client.list_blobs()
for blob in blob_list:
print(blob.name + '\n')
本示例中的所有行都运行良好,除了最后一行,这会引发以下错误:
---------------------------------------------------------------------------
StorageErrorException Traceback (most recent call last)
/anaconda/envs/azureml_py36_automl/lib/python3.6/site-packages/azure/storage/blob/_list_blobs_helper.py in _get_next_cb(self,continuation_token)
75 cls=return_context_and_deserialized,---> 76 use_location=self.location_mode)
77 except StorageErrorException as error:
/anaconda/envs/azureml_py36_automl/lib/python3.6/site-packages/azure/storage/blob/_generated/operations/_container_operations.py in list_blob_flat_segment(self,prefix,marker,maxresults,include,timeout,request_id,cls,**kwargs)
1215 map_error(status_code=response.status_code,response=response,error_map=error_map)
-> 1216 raise models.StorageErrorException(response,self._deserialize)
1217
StorageErrorException: (InvalidQueryParameterValue) Value for one of the query parameters specified in the request URI is invalid.
RequestId:39f9e5c3-201f-0114-551d-efab6d000000
Time:2021-01-20T11:13:03.6566856Z
During handling of the above exception,another exception occurred:
AttributeError Traceback (most recent call last)
<ipython-input-6-a064d97987b5> in <module>
----> 1 for blob in blob_list:
2 print(blob.name + '\n')
/anaconda/envs/azureml_py36_automl/lib/python3.6/site-packages/azure/core/paging.py in __next__(self)
127 if self._page_iterator is None:
128 self._page_iterator = itertools.chain.from_iterable(self.by_page())
--> 129 return next(self._page_iterator)
130
131 next = __next__ # Python 2 compatibility.
/anaconda/envs/azureml_py36_automl/lib/python3.6/site-packages/azure/core/paging.py in __next__(self)
74 raise StopIteration("End of paging")
75 try:
---> 76 self._response = self._get_next(self.continuation_token)
77 except AzureError as error:
78 if not error.continuation_token:
/anaconda/envs/azureml_py36_automl/lib/python3.6/site-packages/azure/storage/blob/_list_blobs_helper.py in _get_next_cb(self,continuation_token)
76 use_location=self.location_mode)
77 except StorageErrorException as error:
---> 78 process_storage_error(error)
79
80 def _extract_data_cb(self,get_next_return):
/anaconda/envs/azureml_py36_automl/lib/python3.6/site-packages/azure/storage/blob/_shared/response_handlers.py in process_storage_error(storage_error)
92 error_body = ContentDecodePolicy.deserialize_from_http_generics(storage_error.response)
93 if error_body:
---> 94 for info in error_body.iter():
95 if info.tag.lower() == 'code':
96 error_code = info.text
AttributeError: 'dict' object has no attribute 'iter'
我做错了什么?
有关信息,我使用的是 Python 3.6.9,azure-storage-blob 版本==12.5.0 和 azure-identity==1.4.1。
解决方法
包 azure.storage.blob
用于访问 Azure blob。我们在脚本中使用的帐户 URL 应该类似于 https://{StorageAccountName}.blob.core.windows.net
。 URL https://{StorageAccountName}.dfs.core.windows.net
是 Azure Data Lake Storage Gen2 的 URL。如果要列出存储在 Azure Data Lake Storage Gen2 中的文件,则需要使用包 azure-storage-file-datalake
。除了关于如何使用该软件包,请参阅sample
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。