Je souhaite pouvoir supprimer en lisant simplement le fichier contenant le nom de clé de l'objet à supprimer et en l'exécutant en un clic.
-Préparer un fichier dans lequel la clé de l'objet à supprimer est écrite. -Utilisez l'API S3 (delete_objects) pour spécifier et supprimer la clé pendant la boucle.
Lien de référence ・ À propos de la suppression de S3
-Créer une liste clé des objets à supprimer.
Liste clé des objets à supprimer
hoge/fuga/hoge.jpg
hoge/fuga/hoge.png
hoge/hoge/hoge.gif
hoge/hoge/fuga.png
・ ・ ・
fuga/fuga/fuga.png
-Exécuter le programme de suppression Étant donné que delete_objects ne peut spécifier que 1000 éléments à la fois, la liste des clés de lecture est subdivisée en 1000 éléments. Appuyez sur l'API DELETE dans les unités divisées pour exécuter la boucle.
Supprimer le programme.py
import boto3
import re
import json
MY_REGION = 'Nom de la région';
MY_BUCKET = 'Nom du godet';
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]
#Lire les données supprimées
with open('Liste clé des objets à supprimer.text') as f:
img_path_list = f.readlines()
#Supprimez le saut de ligne à la fin des données et ajoutez-le à la liste
for path in img_path_list:
path = path.replace('\n','')
request_list.append({'Key': path})
#Divisez la liste en 1000 éléments
# devide_list = [[0,...,999],[1000,...,1999],...,[n,...,n+999]]
devide_list = list(split_list(request_list))
#Exécutez l'API DELETE
for key_list in devide_list:
response = client.delete_objects(
Bucket = MY_BUCKET,
Delete = {
'Objects': key_list
}
)
#Enregistrez le résultat de la suppression
with open('log/Résultat de la suppression.txt', mode='a') as f:
for res in response['Deleted']:
f.write(json.dumps(res))
f.write('\n')
-Si la suppression est réussie, le résultat sera le suivant.
Résultat de la suppression.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"}
Préparez une liste à supprimer et une liste à ne pas supprimer et vérifiez s'il existe une clé dans les deux listes.
Afficher les éléments présents dans les deux listes.py
input_urls = ''
not_delete_urls = ''
#Lire les données de la liste
with open('Liste d'entrée.txt') as f:
input_urls = f.readlines();
with open('Liste à ne pas supprimer.txt') as f:
not_delete_urls = f.readlines();
duplicate_urls = set(input_urls) & set(not_delete_urls)
#Passer du type d'ensemble au type de liste
list_duplicate_urls = list(duplicate_urls)
list_duplicate_urls.sort()
#Afficher le nombre d'éléments communs et d'éléments
print(len(list_duplicate_urls))
for elem in list_duplicate_urls:
print(elem, end='')
Recommended Posts