Comment puis-je voir ce qu'il y a dans un compartiment dans S3 avec boto3
? (c'est-à-dire faire un "ls"
)?
Procédez comme suit:
import boto3
s3 = boto3.resource('s3')
my_bucket = s3.Bucket('some/path/')
Retour:
s3.Bucket(name='some/path/')
Comment voir son contenu?
mybucket.objects.filter(Prefix='foo/bar')
et il ne listera que les objets avec ce préfixe. Vous pouvez également passer unDelimiter
paramètre.object
comme nom de variable car il masquera le type globalobject
.Ceci est similaire à un 'ls' mais il ne prend pas en compte la convention de dossier de préfixe et listera les objets dans le compartiment. Il appartient au lecteur de filtrer les préfixes qui font partie du nom de la clé.
Dans Python 2:
Dans Python 3:
la source
conn.list_objects(Bucket='bucket_name', Prefix='prefix_string')['Contents']
Je suppose que vous avez configuré l'authentification séparément.
la source
Si vous souhaitez passer les clés ACCESS et SECRET (ce que vous ne devez pas faire, car ce n'est pas sécurisé):
la source
Afin de gérer de grandes listes de clés (c'est-à-dire lorsque la liste de répertoires est supérieure à 1000 éléments), j'ai utilisé le code suivant pour accumuler des valeurs clés (c'est-à-dire des noms de fichiers) avec plusieurs listes (grâce à Amelio ci-dessus pour les premières lignes). Le code est pour python3:
la source
Ma fonction utilitaire s3
keys
est essentiellement une version optimisée de la réponse de @ Hephaestus:Dans mes tests (boto3 1.9.84), c'est nettement plus rapide que le code équivalent (mais plus simple):
Comme S3 garantit des résultats triés binaires UTF-8 , une
start_after
optimisation a été ajoutée à la première fonction.la source
list()
pour renvoyer une liste de fichiers.De manière plus parcimonieuse, plutôt que d'itérer via une boucle for, vous pouvez également simplement imprimer l'objet d'origine contenant tous les fichiers de votre compartiment S3:
la source
files_in_s3
c'est un "objet de liste". Il n'y a rien de tel en Python. C'est plutôt un itérable et je n'ai pas pu faire fonctionner votre code et j'ai donc voté contre. Ensuite, j'ai trouvé l'erreur et vu votre point, mais je n'ai pas pu annuler mon vote défavorable.ObjectSummary:
Il existe deux identificateurs attachés à l'ObjectSummary:
boto3 S3: Résumé de l'objet
En savoir plus sur les clés d'objet de la documentation AWS S3:
Voici un exemple de code qui montre comment obtenir le nom du compartiment et la clé d'objet.
Exemple:
la source
Je l'ai juste fait comme ça, y compris la méthode d'authentification:
la source
la source
ls
. Comment feriez-vous cela ... imprimez uniquement les fichiers à la racineAvec peu de modifications au code de @Hephaeastus dans l'un des commentaires ci-dessus, a écrit la méthode ci-dessous pour lister les dossiers et les objets (fichiers) dans un chemin donné. Fonctionne de la même manière que la commande s3 ls.
Cela répertorie tous les objets / dossiers dans un chemin donné. Folder_path peut être laissé comme None par défaut et la méthode listera le contenu immédiat de la racine du bucket.
la source
Voici la solution
importer boto3
s3 = boto3.resource ('s3')
BUCKET_NAME = 'Votre nom de compartiment S3, par exemple'deletemetesting11' '
allFiles = s3.Bucket (BUCKET_NAME) .objects.all ()
pour le fichier dans allFiles: print (file.key)
la source
Vous demandez donc l'équivalent de
aws s3 ls
in boto3. Ce serait la liste de tous les dossiers et fichiers de niveau supérieur. C'est le plus proche que je puisse obtenir; il répertorie uniquement tous les dossiers de niveau supérieur. Il est surprenant de constater à quel point une opération aussi simple est difficile.la source
Voici une fonction simple qui vous renvoie les noms de fichiers de tous les fichiers ou fichiers avec certains types tels que «json», «jpg».
la source
Cela peut également être fait comme suit:
la source