In Boto 3 wurden die Methoden 'Key.set_contents_from_' durch ersetzt
Beispielsweise:
import boto3
some_binary_data = b'Here we have some data'
more_binary_data = b'Here we have some more data'
# Method 1: Object.put()
s3 = boto3.resource('s3')
object = s3.Object('my_bucket_name', 'my/key/including/filename.txt')
object.put(Body=some_binary_data)
# Method 2: Client.put_object()
client = boto3.client('s3')
client.put_object(Body=more_binary_data, Bucket='my_bucket_name', Key='my/key/including/anotherfilename.txt')
Alternativ können die Binärdaten aus dem Lesen einer Datei stammen, wie in den offiziellen Dokumenten zum Vergleich von Boto 2 und Boto 3 beschrieben :
Daten speichern
Das Speichern von Daten aus einer Datei, einem Stream oder einer Zeichenfolge ist einfach:
# Boto 2.x
from boto.s3.key import Key
key = Key('hello.txt')
key.set_contents_from_file('/tmp/hello.txt')
# Boto 3
s3.Object('mybucket', 'hello.txt').put(Body=open('/tmp/hello.txt', 'rb'))
s3.Object().put()
ich ein Objekt mit Nullcontent-length
. Für michput()
akzeptiert nur String-Daten,put(str(binarydata))
scheint aber einige Codierungsprobleme zu haben. Am Ende habe ich ein Objekt, das ungefähr dreimal so groß ist wie die Originaldaten, was es für mich unbrauchbar macht.boto3 hat auch eine Methode zum direkten Hochladen einer Datei:
http://boto3.readthedocs.io/en/latest/reference/services/s3.html#S3.Bucket.upload_file
quelle
s3.Bucket(...).upload_fileobj()
stattdessen die Methode verwenden.Sie müssen den Inhalt nicht mehr in Binär konvertieren, bevor Sie in S3 in die Datei schreiben. Im folgenden Beispiel wird eine neue Textdatei (newfile.txt) in einem S3-Bucket mit Zeichenfolgeninhalt erstellt:
quelle
prefix
in diesem Fall eine? Was ist, wenn Sie die Datei speichern möchtenmy-bucket-name/subfolder/
?Hier ist ein schöner Trick, um JSON von s3 zu lesen:
Jetzt können Sie
json.load_s3
undjson.dump_s3
mit derselben API wieload
und verwendendump
quelle
...["Body"].read().decode('utf-8')
.Eine übersichtlichere und übersichtlichere Version, mit der ich Dateien im laufenden Betrieb in einen bestimmten S3-Bucket und Unterordner hochlade.
Hinweis : Sie sollten Ihre AWS-Anmeldeinformationen (
aws_access_key_id
undaws_secret_access_key
) IMMER in einer separaten Datei ablegen, z.~/.aws/credentials
quelle
~
C:\Users\username\.aws\credentials
Erwähnenswert ist Smart-Open , das
boto3
als Backend verwendet wird .smart-open
ist ein Drop-in - Ersatz für Python ,open
die Dateien aus öffnen kanns3
, sowieftp
,http
und viele andere Protokolle.beispielsweise
Die aws-Anmeldeinformationen werden über boto3-Anmeldeinformationen geladen , normalerweise eine Datei im Verzeichnis
~/.aws/
oder eine Umgebungsvariable.quelle
Sie können den folgenden Code verwenden, um beispielsweise ein Image in S3 im Jahr 2019 zu schreiben. Um eine Verbindung zu S3 herstellen zu können, müssen Sie AWS CLI mit dem Befehl installieren
pip install awscli
und anschließend mit dem Befehl einige Anmeldeinformationen eingebenaws configure
:quelle