So speichern Sie S3-Objekt in einer Datei mit boto3

Ich versuche, eine "hallo Welt" mit neuen boto3 Client für AWS zu machen.

Der Use-Case habe ich ziemlich einfach: bekomme Objekt von S3 und speichere es in der Datei.

In boto 2.XI würde es so machen:

import boto key = boto.connect_s3().get_bucket('foo').get_key('foo') key.get_contents_to_filename('/tmp/foo') 

In boto 3 Ich kann nicht einen sauberen Weg finden, dasselbe zu tun, also verwende ich manuell über das "Streaming" Objekt:

 import boto3 key = boto3.resource('s3').Object('fooo', 'docker/my-image.tar.gz').get() with open('/tmp/my-image.tar.gz', 'w') as f: chunk = key['Body'].read(1024*8) while chunk: f.write(chunk) chunk = key['Body'].read(1024*8) 

oder

 import boto3 key = boto3.resource('s3').Object('fooo', 'docker/my-image.tar.gz').get() with open('/tmp/my-image.tar.gz', 'w') as f: for chunk in iter(lambda: key['Body'].read(4096), b''): f.write(chunk) 

Und es geht gut Ich habe mich gefragt, gibt es irgendeine "native" boto3 Funktion, die die gleiche Aufgabe machen wird?

4 Solutions collect form web for “So speichern Sie S3-Objekt in einer Datei mit boto3”

Es gibt eine Anpassung, die in Boto3 vor kurzem ging, was dazu beiträgt (unter anderem). Es ist derzeit auf dem Low-Level-S3-Client ausgesetzt und kann so verwendet werden:

 s3_client = boto3.client('s3') open('hello.txt').write('Hello, world!') # Upload the file to S3 s3_client.upload_file('hello.txt', 'MyBucket', 'hello-remote.txt') # Download the file from S3 s3_client.download_file('MyBucket', 'hello-remote.txt', 'hello2.txt') print(open('hello2.txt').read()) 

Diese Funktionen werden automatisch mit Lese- / Schreib-Dateien verknüpft sowie Multipart-Uploads parallel für große Dateien durchgeführt.

Boto3 hat jetzt eine schönere Schnittstelle als der Client:

 resource = boto3.resource('s3') my_bucket = resource.Bucket('MyBucket') my_bucket.download_file(key, local_filename) 

Dies allein ist nicht enorm besser als der client in der akzeptierten Antwort (obwohl die docs sagen, dass es einen besseren Job wiederholt Uploads und Downloads auf Ausfall), aber unter Berücksichtigung, dass Ressourcen sind in der Regel mehr ergonomisch (zum Beispiel die s3 Eimer und Objekt Ressourcen sind schöner als die Client-Methoden) Dies ermöglicht es Ihnen, auf der Ressource-Schicht bleiben, ohne zu fallen.

Resources können in der Regel in der gleichen Weise wie Kunden erstellt werden, und sie nehmen alle oder die meisten der gleichen Argumente und nur weiterleiten sie an ihre internen Clients.

Für diejenigen unter Ihnen, die die set_contents_from_string wie boto2 Methoden simulieren möchten, können Sie versuchen

 import boto3 from cStringIO import StringIO s3c = boto3.client('s3') contents = 'My string to save to S3 object' target_bucket = 'hello-world.by.vor' target_file = 'data/hello.txt' fake_handle = StringIO(contents) # notice if you do fake_handle.read() it reads like a file handle s3c.put_object(Bucket=target_bucket, Key=target_file, Body=fake_handle.read()) 
 # Preface: File is json with contents: {'name': 'Android', 'status': 'ERROR'} import boto3 import io s3 = boto3.resource( 's3', aws_access_key_id='my_access_id', aws_secret_access_key='my_secret_key' ) obj = s3.Object('my-bucket', 'key-to-file.json') data = io.BytesIO() obj.download_fileobj(data) # object is now a bytes string, Converting it to a dict: new_dict = json.loads(data.getvalue().decode("utf-8")) print(new_dict['status']) # Should print "Error" 
  • Wie kann ich einen S3 Eimer mit Boto3 erstellen?
  • Wie SSH und führen Sie Befehle in EC2 mit boto3?
  • Django StreamingHttpResponse Format Fehler
  • Wie aktualisiere ich Metadaten eines vorhandenen Objekts in AWS S3 mit python boto3?
  • Um zu überprüfen, ob die AWS-Instanz nach dem Neustart mit python auftritt
  • Wie wähle ich ein AWS-Profil bei der Verwendung von boto3, um eine Verbindung zu CloudFront herzustellen
  • Wie kann man ein SECRET_HASH für AWS Cognito mit boto3 erstellen?
  • EC2-Instanzname mit Boto 3 anzeigen
  • Wie füge ich eine Karte in die DynamoDB-Tabelle ein?
  • Was ist der Unterschied zwischen dem AWS boto und boto3
  • Wie man url aus boto3 in amazon web services generiert
  • Python ist die beste Programmiersprache der Welt.