Ich muss einen Code in Python schreiben, der die erforderliche Datei aus dem Amazon S3-Bucket löscht, ich kann Verbindungen zum Amazon S3-Bucket herstellen und auch Dateien speichern, ich möchte nur wissen, wie man eine Datei löscht ? bitte helfen Sie, wenn jemand weiß.Wie lösche ich Dateien aus Amazon S3 Eimer?
Antwort
Über welche Schnittstelle? Unter Verwendung der REST-Schnittstelle, die Sie gerade send a delete:
DELETE /ObjectName HTTP/1.1
Host: BucketName.s3.amazonaws.com
Date: date
Content-Length: length
Authorization: signatureValue
Via die SOAP interface:
<DeleteObject xmlns="http://doc.s3.amazonaws.com/2006-03-01">
<Bucket>quotes</Bucket>
<Key>Nelson</Key>
<AWSAccessKeyId> 1D9FVRAYCP1VJEXAMPLE=</AWSAccessKeyId>
<Timestamp>2006-03-01T12:00:00.183Z</Timestamp>
<Signature>Iuyz3d3P0aTou39dzbqaEXAMPLE=</Signature>
</DeleteObject>
Wenn Sie eine Python-Bibliothek like boto verwenden, sollte es eine "Löschen" -Funktion, wie delete_key()
aussetzen.
ja, ich benutze diese Python-Bibliothek, aber wird das löschen, die Datei? soll ich tun es auf diese Weise: k.key = 'images/Anon-images/small /' + Dateiname k.delete_key() ist das richtig? lass es mich wissen, bitte. – Suhail
@Suhail: Ich habe diese Bibliothek nicht benutzt, aber von der Quelle, die ich verlinkt habe, ist eigentlich ein 'DELETE'-Aufruf über die REST-Schnittstelle. Also ja, trotz des Namens "delete_key" (was ich stimme zu, ist unklar), es ist wirklich das Löschen des Objekts * referenziert * mit dem Schlüssel. –
Was ist mit dem Entfernen von vielen Dateien mit einem gemeinsamen Präfix im Namen? Erlaubt S3 ein Massenlöschung für einen solchen Fall, oder löschen sie einzeln (was langsam ist) ist das Muss? –
Für jetzt habe ich das Problem gelöst, indem Sie das Linux-Dienstprogramm s3cmd verwenden. Ich benutzte es, wie dies in Python:
Es ist nicht genau pythonisch, eine Subshell aufzurufen, um mit S3 zu kommunizieren (eine Bibliothek oder eine direkte HTTP-Transaktion wäre eleganter), aber es funktioniert trotzdem. Ich denke nicht, dass es einen Downvote verdient. +1. –
wirklich, das ist nicht einmal falsch – rbp
eine weitere Möglichkeit gefunden, es zu tun mit der Boto:
from boto.s3.connection import S3Connection, Bucket, Key
conn = S3Connection(AWS_ACCESS_KEY, AWS_SECERET_KEY)
b = Bucket(conn, S3_BUCKET_NAME)
k = Key(b)
k.key = 'images/my-images/'+filename
b.delete_key(k)
Wenn Sie ALLES in einem Eimer löschen wollten, könnten Sie tun: 'für x in b.list(): b.delete_key (x.Schlüssel) ' – jontsai
Ich liebe, wie in meiner Datei wird es' bucket.list() ' –
Für dieses Code-Snippet, um wie dargestellt zu arbeiten, müssen Sie' Bucket' und 'Key' auch zu importieren. Wie in: 'from boto.s3.connection importieren S3Connection, Bucket, Key' –
Ich bin überrascht, es ist nicht so einfach Art und Weise: key.delete()
:
from boto.s3.connection import S3Connection, Bucket, Key
conn = S3Connection(AWS_ACCESS_KEY, AWS_SECERET_KEY)
bucket = Bucket(conn, S3_BUCKET_NAME)
k = Key(bucket = bucket, name=path_to_file)
k.delete()
mit den Python boto3 SDK (und unter der Annahme, Anmeldeinformationen Setup sind für AWS) wird im folgenden ein angegebenes Objekt in einem Eimer löschen:
import boto3
client = boto3.client('s3')
client.delete_object(Bucket='mybucketname', Key='myfile.whatever')
erstellt dies nicht nur einen Lösch-Marker? – Rob
Verwenden Sie boto3
(derzeit Version 1.4.4) S3.Object.delete()
.
import boto3
s3 = boto3.resource('s3')
s3.Object('your-bucket', 'your-key').delete()
Welche Python-Bibliothek (falls vorhanden) verwenden Sie für die S3-Unterstützung? Oder gehen Sie direkt zu den REST- oder SOAP-Schnittstellen in Ihrem Python-Code? –
ich benutze die Python-Bibliothek boto.s3 – Suhail