Comment puis-je afficher le contenu du répertoire d'un compartiment S3 à l'aide de Python et Boto3?
Je suis en train de la liste de tous les répertoires à l'intérieur d'un compartiment S3 à l'aide de Python et Boto3.
Je suis en utilisant le code suivant:
s3 = session.resource('s3') # I already have a boto3 Session object
bucket_names = [
'this/bucket/',
'that/bucket/'
]
for name in bucket_names:
bucket = s3.Bucket(name)
for obj in bucket.objects.all(): # this raises an exception
# handle obj
Lorsque je l'exécute j'ai le trace de pile d'exception:
File "botolist.py", line 67, in <module>
for obj in bucket.objects.all():
File "/Library/Python/2.7/site-packages/boto3/resources/collection.py", line 82, in __iter__
for page in self.pages():
File "/Library/Python/2.7/site-packages/boto3/resources/collection.py", line 165, in pages
for page in pages:
File "/Library/Python/2.7/site-packages/botocore/paginate.py", line 83, in __iter__
response = self._make_request(current_kwargs)
File "/Library/Python/2.7/site-packages/botocore/paginate.py", line 155, in _make_request
return self._method(**current_kwargs)
File "/Library/Python/2.7/site-packages/botocore/client.py", line 270, in _api_call
return self._make_api_call(operation_name, kwargs)
File "/Library/Python/2.7/site-packages/botocore/client.py", line 335, in _make_api_call
raise ClientError(parsed_response, operation_name)
botocore.exceptions.ClientError: An error occurred (NoSuchKey) when calling the ListObjects operation: The specified key does not exist.
Est-ce le bon moyen de la liste de répertoires à l'intérieur d'un seau?
Merci beaucoup à l'avance...
OriginalL'auteur Allen Gooch | 2015-09-17
Vous devez vous connecter pour publier un commentaire.
Alternativement, vous pouvez utiliser
boto3.client
Exemple
list_objects
prend également en charge d'autres arguments qui pourraient être requis pour effectuer une itération si le résultat: Seau, Séparateur, EncodingType, Marqueur, MaxKeys, PréfixeCette méthode retourne jusqu'à 1000 résultats.
OriginalL'auteur Vor
Si vous avez de la session, de créer un client et obtenir le
CommonPrefixes
des clientslist_objects
:Il pourrait y avoir beaucoup de dossiers, et vous voudrez peut-être commencer dans un sous-dossier, si. Quelque chose comme cela pourrait poignée:
hey, amazon!!! ajouter cette fonction, plz!!! Je ne comprends pas pourquoi il ne fait pas partie de la bibliothèque.
OriginalL'auteur Anne M.
J'aurais pensé que vous ne pouvez pas avoir une barre oblique dans un seau nom. Vous dites que vous voulez la liste de tous les répertoires à l'intérieur d'un seau, mais votre code tente d'énumérer tous les contenus (pas nécessairement répertoires) dans un certain nombre de segments. Ces seaux probablement n'existent pas (parce qu'ils ont un nom illégal). Ainsi, lorsque vous exécutez
seau est probablement nulle, et la liste va échouer.
OriginalL'auteur Old_Mortality