[PYTHON] So überprüfen Sie, ob sich der angegebene Schlüssel im angegebenen Bucket in Boto 3 befindet

In Boto 3 gibt es keine Methode, die "exist ()" entspricht und die Existenz eines Schlüssels bis zum Zeitpunkt von Boto 2 bestätigt. Eine ähnliche Funktion kann jedoch erreicht werden, indem list_objects () verwendet wird, wie unten gezeigt.

exists.py


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

def exists(bucket: str, key: str) -> bool:
    """
Existiert der angegebene Schlüssel im angegebenen Bucket?

    :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

Kommentar

list_objects () gibt einen Hash der Form zurück:

{
    'IsTruncated': True|False,  #Wurde das Ergebnis geschreddert? Richtig wenn ja
    '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',
<Ausgelassen>
}

"Inhalt" ist der Schlüssel, und dies ist die Reihenfolge der entsprechenden Schlüssel. Wenn kein entsprechender Schlüssel vorhanden ist, wird "Inhalt" nicht in den Rückgabewert aufgenommen. Überprüfen Sie daher, ob "Inhalt" enthalten ist und ob der Wert von "Schlüssel" im Wörterbuch in der Liste mit dem als Argument angegebenen "Schlüssel" übereinstimmt. Dies entspricht "existiert ()". Sie können die Funktion reproduzieren.

Vollständiger Pfad des Schlüssels zum Präfix? Es fühlt sich etwas seltsam an, etwas zu spezifizieren, aber ich verstehe, dass Präfix so etwas ist.

29.06.2017 Nachtrag

In den folgenden Fällen hat es nicht richtig funktioniert, also habe ich es behoben (thx, @masahiro_toriumi)

Präfix gibt nur das Präfix des Schlüssels an. Wenn Sie beispielsweise list_object mit dem Präfix "MyBucket / aaa.txt" aufrufen, wird es auch in "MyBucket / aaa.txt.bak" abgefangen, also "MyBucket /" Ich kann nicht genau sagen, ob der Schlüssel "aaa.txt" existiert

Recommended Posts

So überprüfen Sie, ob sich der angegebene Schlüssel im angegebenen Bucket in Boto 3 befindet
So stellen Sie fest, dass in Python3 ein Kreuzschlüssel eingegeben wurde
Die Geschichte, den privaten Schlüssel mit chmod auf 600 zu setzen
Geben Sie die in S3 Bucket enthaltene Schlüsselliste in eine Datei aus
Machen Sie einen beliebigen Schlüssel zum Primärschlüssel im Django-Modell
So erstellen Sie einen Raspberry Pi, der die Tweets eines bestimmten Benutzers spricht
Der Hintergrund der Zeichen im Textbild ist überbelichtet, um das Lesen zu erleichtern.
Linux ist in erster Linie so etwas
Suchen Sie den Teil 575 aus Wikipedia in Python
Die Theorie, dass der Schlüssel zur Kontrolle der Infektion des neuen Coronavirus die Hyperdispersion der Anfälligkeit ist.
[Python] Stellen Sie sicher, dass die empfangene Funktion eine benutzerdefinierte Funktion ist
Ruft den Wert eines bestimmten Schlüssels bis zum angegebenen Index der Wörterbuchliste in Python ab
[Python] Programmieren, um die Nummer von a in einer Zeichenfolge zu finden, die eine bestimmte Anzahl von Malen wiederholt.
Wenn sich eine Zeichenfolge einer bestimmten Reihe im Schlüssel des Wörterbuchs befindet, wird die Zeichenfolge in den Wert des Wörterbuchs konvertiert.
So löschen Sie "(base)", das im Terminal angezeigt wird, wenn Anaconda auf einem Mac installiert ist
[VLC] Wie man mit dem Problem umgeht, dass es während der Wiedergabe nicht im Vordergrund steht
Stellen Sie sicher, dass alle Elemente in der Liste in Python identisch sind
So testen Sie, ob die Ausnahme in Python unittest ausgelöst wird
[Python] So überprüfen Sie, ob der Schlüssel im Wörterbuch vorhanden ist
Kombinieren Sie Listen zu einem DataFrame mit Pandas
Versuchen Sie, die in COTOHA beliebten Schlüsselwörter zu extrahieren
Gibt es eine Verzerrung in den Zahlen, die in den Fibonacci-Zahlen erscheinen?
Ich möchte den Wörterbuchtyp in der Liste eindeutig machen
Ich wollte den AWS-Schlüssel nicht in das Programm schreiben
Hypothese / Verifikation (176) Wie man ein Lehrbuch macht, das einfacher ist als "Das einfachste Lehrbuch für Quantencomputer"
Lösung für das Problem, dass die Anzeige beschädigt ist, wenn der Befehl .exe in der while-Schleife in wsl2 enthalten ist
Eine kleine süchtig machende Geschichte mit den Berechtigungen des von expdp angegebenen Verzeichnisses (für Anfänger)
Spielen Sie Sounds in Python ab, vorausgesetzt, die Tastatur ist eine Klaviertastatur
[PyTorch] Überprüfen Sie, ob sich Modell und Datensatz im Cuda-Modus befinden
Geben und meinen Sie die Einschränkungsoption in scipy.optimize.minimize
Verwendung von Sternchen (*) in Python. Vielleicht ist das alles? ..
Ein Skript, das Boto verwendet, um einen bestimmten Ordner in Amason S3 hochzuladen
Wirf etwas mit Python in Kinesis und stelle sicher, dass es drin ist
Ich möchte die zweite Zeile zum Spaltennamen in Pandas machen
Die Geschichte, dass Vererbungsverhalten in jeder Sprache sehr unterschiedlich ist
Was tun, wenn der Werttyp in Python nicht eindeutig ist?
Programmieren, um in der Welt zu kämpfen ~ 5-1
Programmieren, um in der Welt zu kämpfen 5-3
Programmierung für den Kampf in der Welt - Kapitel 4
Im Python-Befehl zeigt Python auf Python3.8
[Python] Was ist der sortierte Schlüssel?
Probieren Sie Cython in kürzester Zeit aus
Programmieren, um in der Welt zu kämpfen ~ 5-2
Der einfachste Weg, eine Flasche herzustellen
Was tun, wenn das über Scrapy heruntergeladene Ergebnis auf Englisch ist?
[C-Sprache] Ich möchte Zufallszahlen im angegebenen Bereich generieren
Über den Fall, dass der Lautsprecher in Ubuntu LTS 20.04 keinen Ton erzeugt hat
Ein Shell-Skript, um sich wieder an die pipenv-Shell zu erinnern
Was ist eine C-Sprachbibliothek? Welche Informationen sind für die Öffentlichkeit zugänglich?
Was tun, wenn in der Anaconda-Umgebung die Warnung "Die Umgebung ist konsistent ..." angezeigt wird
[Competition Pro] Ein Algorithmus, der das Sandwich-Teil umdreht, um es zu erstellen. ● (JSC2019-C Cell Inversion)
Ich habe ein Skript erstellt, um zu überprüfen, ob an der angegebenen Position der JSON-Datei in Python Englisch eingegeben wird.