I would like to list the blobs (the files) in an Azure container. To do so, I reproduced exactly the code snippet given as an example in the official documentation (see here). Here is what my code looks like:
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')
All the lines in this example run fine except the last one, which throws the following error:
---------------------------------------------------------------------------
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'
What am I doing wrong?
For info, I'm using Python 3.6.9 with azure-storage-blob version==12.5.0 and azure-identity==1.4.1.
The package azure.storage.blob
is used to to access Azure blob. Account URL that we use in script should be like https://{StorageAccountName}.blob.core.windows.net
. The URL https://{StorageAccountName}.dfs.core.windows.net
is the URL of Azure Data Lake Storage Gen2. If you want to list files stored in Azure Data Lake Storage Gen2, you need to use the package azure-storage-file-datalake
. Besides regarding how to use the package, please refer to the sample