[PYTHON] Löschen Sie jeweils 1000 in AWS S3 gespeicherte Objekte.

Was du machen willst

Ich möchte löschen können, indem ich einfach die Datei mit dem Schlüsselnamen des zu löschenden Objekts lese und mit einem Klick ausführe.

Politik

Referenzlink ・ Informationen zum Löschen von S3

Was ich getan habe

Schlüsselliste der zu löschenden Objekte


hoge/fuga/hoge.jpg
hoge/fuga/hoge.png
hoge/hoge/hoge.gif
hoge/hoge/fuga.png
・ ・ ・
fuga/fuga/fuga.png

Programm entfernen.py



import boto3
import re
import json

MY_REGION = 'Regionsname';
MY_BUCKET = 'Eimername';

client = boto3.client('s3', region_name=MY_REGION)
request_list = []
img_path_list = ''

def split_list(l):
    for idx in range(0, len(l), 1000):
        yield l[idx:idx + 1000]

#Gelöschte Daten lesen
with open('Schlüsselliste der zu löschenden Objekte.text') as f:
    img_path_list = f.readlines()

#Entfernen Sie den Zeilenumbruch am Ende der Daten und fügen Sie ihn der Liste hinzu
for path in img_path_list:
    path = path.replace('\n','')
    request_list.append({'Key': path})

#Teilen Sie die Liste in 1000 Elemente
# devide_list = [[0,...,999],[1000,...,1999],...,[n,...,n+999]]
devide_list = list(split_list(request_list))

#Führen Sie die DELETE-API aus
for key_list in devide_list:
    response = client.delete_objects(
        Bucket = MY_BUCKET,
        Delete = {
            'Objects': key_list
        }
    )

    #Notieren Sie das Löschergebnis
    with open('log/Löschergebnis.txt', mode='a') as f:
        for res in response['Deleted']:
            f.write(json.dumps(res))
            f.write('\n')

-Wenn das Löschen erfolgreich ist, sieht das Ergebnis wie folgt aus.

Löschergebnis.text


{"Key": "hoge/fuga/hoge.jpg ", "DeleteMarker": true, "DeleteMarkerVersionId": "hogehoge1"}
{"Key": "hoge/fuga/hoge.png ", "DeleteMarker": true, "DeleteMarkerVersionId": "hogehoge2"}
{"Key": "hoge/hoge/hoge.gif", "DeleteMarker": true, "DeleteMarkerVersionId": "hogehoge3"}
{"Key": "hoge/hoge/fuga.png ", "DeleteMarker": true, "DeleteMarkerVersionId": "hogehoge4"}
{"Key": "fuga/fuga/fuga.png ", "DeleteMarker": true, "DeleteMarkerVersionId": "hogehoge5"}

Andere

Bereiten Sie eine Liste zum Löschen und eine Liste zum Nichtlöschen vor und prüfen Sie, ob in beiden Listen ein Schlüssel vorhanden ist.

Zeigen Sie die in den beiden Listen enthaltenen Elemente an.py


input_urls = ''
not_delete_urls = ''

#Listendaten lesen
with open('Eingabeliste.txt') as f:
    input_urls = f.readlines();

with open('Liste nicht löschen.txt') as f:
    not_delete_urls = f.readlines();

duplicate_urls = set(input_urls) & set(not_delete_urls)

#Wechseln Sie vom Set-Typ zum Listentyp
list_duplicate_urls = list(duplicate_urls)
list_duplicate_urls.sort()

#Zeigen Sie die Anzahl der gemeinsamen Elemente und Elemente an
print(len(list_duplicate_urls))
for elem in list_duplicate_urls:
    print(elem, end='')

Vorsichtsmaßnahmen

Recommended Posts

Löschen Sie jeweils 1000 in AWS S3 gespeicherte Objekte.
Ich wollte mit boto3 mehrere objekte in s3 löschen
Ich habe eine Instanz zu einem bestimmten Zeitpunkt mit AWS Lambda gestoppt
Holen Sie sich zu jeder Tageszeit eine Datums- / Uhrzeitinstanz in Python
Ich habe einen neuen AWS S3-Eimer hergestellt
Drehen Sie in Python mehrere Listen mit for-Anweisung gleichzeitig
Erstellen Sie in kürzester Zeit eine LAMP-Umgebung
Empfangen und verarbeiten Sie n Objekte in einer Liste
Löschen Sie Daten in einem Muster mit Redis Cluster
Eine clevere Möglichkeit zur Zeitverarbeitung mit Python
Schleifen Sie gleichzeitig Variablen in der Vorlage