Python / Boto 3: Wie kann ich Dateien von AWS S3 abrufen / herunterladen?

In Python / Boto 3, herausgefunden, dass eine Datei einzeln von S3 auf lokal herunterzuladen, kann folgendes tun:

bucket = self._aws_connection.get_bucket(aws_bucketname) for s3_file in bucket.list(): if filename == s3_file.name: self._downloadFile(s3_file, local_download_directory) break; 

Und um alle Dateien unter einem ausgewählten Verzeichnis herunterzuladen:

  else: bucket = self._aws_connection.get_bucket(aws_bucketname) for s3_file in bucket.list(): self._downloadFile(s3_file, local_download_directory) 

Und Helferfunktion _downloadFile() :

  def _downloadFile(self, s3_file, local_download_destination): full_local_path = os.path.expanduser(os.path.join(local_download_destination, s3_file.name)) try: print "Downloaded: %s" % (full_local_path) s3_file.get_contents_to_filename(full_local_path) 

Aber beide scheinen nicht zu arbeiten. Mit Boto 3 und Python, möchte ich alle Dateien herunterladen können, als zip vorzugsweise, unter einem definierten Verzeichnis auf S3 zu meinem lokalen.

Was könnte ich falsch machen und was ist die richtige Umsetzung der Parameter?

Vielen Dank im Voraus, und wird sicher zu akzeptieren / upvote Antwort

UPDATE CODE : Getting an error: “AttributeError: 'S3' object has no attribute

 import sys import json import os import subprocess import boto3 from boto.s3.connection import S3Connection s3 = boto3.resource('s3') s3client = boto3.client('s3') #This works for bucket in s3.buckets.all(): print(bucket.name) def main(): #Getting an error: “AttributeError: 'S3' object has no attribute 'download'” s3client.download('testbucket', 'fileone.json', 'newfile') if __name__ == "__main__": main() 

One Solution collect form web for “Python / Boto 3: Wie kann ich Dateien von AWS S3 abrufen / herunterladen?”

Um Dateien von S3 zu Local FS download_file() , verwenden Sie die Methode download_file()

 s3client = boto3.client('s3') s3client.download_file(Bucket, Key, Filename) 

Wenn das S3-Objekt s3://mybucket/foo/bar/file.txt , dann sind die Argumente

 Bucket --> mybucket Key --> foo/bar/file.txt Filename --> /local/path/file.txt 

Es gibt keine Methoden, um den gesamten Eimer herunterzuladen. Ein alternativer Weg wäre, alle Objekte im Eimer aufzulisten und sie einzeln als Dateien herunterzuladen.

 for obj in s3client.list_objects(Bucket='mybucket')['Contents']: try: filename = obj['Key'].rsplit('/', 1)[1] except IndexError: filename = obj['Key'] localfilename = os.path.join('/home/username/Downloads/', filename) # The local directory must exist. s3client.download_file('mybucket', obj['Key'], localfilename) 

Hinweis: Die Antwort von list_objects() wird auf 1000 Objekte list_objects() . Benutze die Marker in der Antwort, um den Rest der Objekte im Eimer abzurufen.

  • Ändern Sie die Anzahl der Anforderungsversuche in boto3
  • Was ist der Unterschied zwischen dem AWS boto und boto3
  • Implementierung von USER_SRP_AUTH mit python boto3 für AWS Cognito
  • EC2-Instanzname mit Boto 3 anzeigen
  • Wie kann man ein SECRET_HASH für AWS Cognito mit boto3 erstellen?
  • AWS Boto3 BASE64 Kodierungsfehler, der beim Aufruf der Methode client.request_spot_instances ausgelöst wurde
  • Wie kann ich leicht feststellen, ob eine Boto 3 S3 Eimerressource existiert?
  • Boto3 sucht unbenutzte Sicherheitsgruppen
  • Wie aktualisiere ich Metadaten eines vorhandenen Objekts in AWS S3 mit python boto3?
  • Lesen Sie den Inhalt der Datei von S3 Eimer mit boto3
  • Wie SSH und führen Sie Befehle in EC2 mit boto3?
  • Python ist die beste Programmiersprache der Welt.