Pour vérifier si la clé spécifiée se trouve dans le compartiment spécifié dans Boto 3

Dans Boto 3, il n'y a pas de méthode équivalente à ʻexists () qui confirme l'existence de la clé jusqu'au moment de Boto 2. Cependant, une fonction similaire peut être réalisée en utilisant list_objects ()` comme indiqué ci-dessous.

exists.py


from boto3 import Session
s3client = Session().client('s3')

def exists(bucket: str, key: str) -> bool:
    """
La clé spécifiée existe-t-elle dans le compartiment spécifié?

    :param bucket: (str) bucket name
    :param key: (str) key
    :return: (bool)
    """
    contents = s3client.list_objects(Prefix=key, Bucket=bucket).get("Contents")
    if contents:
        for content in contents:
            if content.get("Key") == key:
                return True
    return False

Commentaire

list_objects () retourne un hachage de la forme:

{
    'IsTruncated': True|False,  #Le résultat a-t-il été déchiqueté? Vrai si oui
    'Marker': 'string',
    'NextMarker': 'string',
    'Contents': [
        {
            'Key': 'string',
            'LastModified': datetime(2015, 1, 1),
            'ETag': 'string',
            'Size': 123,
            'StorageClass': 'STANDARD'|'REDUCED_REDUNDANCY'|'GLACIER',
            'Owner': {
                'DisplayName': 'string',
                'ID': 'string'
            }
        },
    ],
    'Name': 'string',
    'Prefix': 'string',
<Omis>
}

Contenu '' est la clé, et c'est la séquence des touches correspondantes. S'il n'y a pas de clé correspondante, Contenu '' ne sera pas inclus dans la valeur de retour. Par conséquent, vérifiez si «Contenu» est inclus, et si la valeur de «Clé» dans le dictionnaire de la liste correspond à la «clé» donnée en argument, cela correspond à «existe ()». Vous pouvez reproduire la fonction.

Chemin complet de la clé vers Prefix? Cela semble un peu étrange à spécifier, mais je comprends que Prefix est une telle chose.

2017/06/29 postscript

Cela ne fonctionnait pas correctement dans les cas suivants, donc je l'ai corrigé (thx, @masahiro_toriumi)

Prefix spécifie uniquement le préfixe de la clé, donc par exemple, si vous appelez list_object avec le préfixe "MyBucket / aaa.txt", il sera également pris dans "MyBucket / aaa.txt.bak", donc "MyBucket / Je ne peux pas dire exactement si la clé "aaa.txt" existe

Recommended Posts

Pour vérifier si la clé spécifiée se trouve dans le compartiment spécifié dans Boto 3
Comment déterminer qu'une clé croisée a été entrée dans Python3
L'histoire de la définition de la clé privée à 600 avec chmod
Exporter la liste de clés incluse dans S3 Bucket dans un fichier
Faire de n'importe quelle clé la clé primaire dans le modèle Django
Comment faire un Raspberry Pi qui parle les tweets d'un utilisateur spécifié
L'arrière-plan des caractères de l'image texte est surexposé pour faciliter la lecture.
Linux est quelque chose comme ça en premier lieu
Trouvez la partie 575 de Wikipedia en Python
La théorie selon laquelle la clé du contrôle de l'infection du nouveau coronavirus est l'hyperdispersion de la sensibilité.
[Python] Assurez-vous que la fonction reçue est une fonction définie par l'utilisateur
Obtenir la valeur d'une clé spécifique jusqu'à l'index spécifié de la liste de dictionnaires en Python
[Python] Programmation pour trouver le nombre de a dans une chaîne de caractères qui se répète un nombre spécifié de fois.
Lorsqu'une chaîne de caractères d'une certaine série se trouve dans la clé du dictionnaire, la chaîne de caractères est convertie en valeur du dictionnaire.
Comment supprimer "(base)" qui apparaît dans le terminal lorsqu'Anaconda est installé sur Mac
[VLC] Comment gérer le problème de ne pas être au premier plan pendant la lecture
Assurez-vous que tous les éléments de la liste sont les mêmes en Python
Comment tester cette exception est déclenchée dans python unittest
[python] Comment vérifier si la clé existe dans le dictionnaire
Combinez des listes dans un DataFrame avec des pandas
Essayez d'extraire les mots-clés populaires dans COTOHA
Y a-t-il un biais dans les nombres qui apparaissent dans les nombres de Fibonacci?
Je veux rendre le type de dictionnaire dans la liste unique
Je ne voulais pas écrire la clé AWS dans le programme
Hypothèse / Vérification (176) Comment créer un manuel plus simple que "Le manuel le plus simple pour les ordinateurs quantiques"
Solution au problème que l'affichage est corrompu lorsque la commande .exe est incluse dans la boucle while dans wsl2
Une petite histoire addictive avec les permissions du répertoire spécifié par expdp (pour les débutants)
Jouez des sons en Python en supposant que le clavier est un clavier de piano
[PyTorch] Vérifiez si le modèle et l'ensemble de données sont en mode cuda
Comment donner et signifier l'option des contraintes dans scipy.optimize.minimize
Comment utiliser l'astérisque (*) en Python. C'est peut-être tout? ..
Un script qui utilise boto pour télécharger un dossier spécifié sur Amason S3
Jetez quelque chose dans Kinesis avec python et assurez-vous qu'il est dans
Je veux faire de la deuxième ligne le nom de la colonne dans pandas
L'histoire selon laquelle le comportement d'héritage est assez différent dans chaque langue
Que faire lorsque le type de valeur est ambigu en Python?
Programmation pour combattre dans le monde ~ 5-1
Programmer pour combattre dans le monde 5-3
Programmation pour combattre dans le monde - Chapitre 4
Dans la commande python, python pointe vers python3.8
[python] Quelle est la clé triée?
Essayez Cython dans les plus brefs délais
Programmation pour combattre dans le monde ~ 5-2
La façon la plus simple de faire un flacon
Que faire lorsque le résultat téléchargé via scrapy est en anglais
[Langage C] Je souhaite générer des nombres aléatoires dans la plage spécifiée
À propos du cas où le haut-parleur ne produisait pas de son dans Ubuntu LTS 20.04
Un script shell pour se souvenir à nouveau du shell pipenv
Qu'est-ce qu'une bibliothèque en langage C? Quelles informations sont ouvertes au public?
Que faire lorsque l'avertissement "L'environnement est cohérent ..." apparaît dans l'environnement Anaconda
[Competition Pro] Un algorithme qui retourne la partie en sandwich pour la rendre ● ○ ●● ○○○ ● → ○○○○○○○○ (Inversion de cellule JSC2019-C) [Explication sur la figure]
J'ai créé un script pour vérifier si l'anglais est entré dans la position spécifiée du fichier JSON en Python.