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.

  • Boto3 kann nicht installiert werden
  • So speichern Sie S3-Objekt in einer Datei mit boto3
  • PyCharm intellisense für boto3
  • EC2-Instanzname mit Boto 3 anzeigen
  • Wie benutzt man botocore.response.StreamingBody als stdin PIPE
  • Wie kann man ein SECRET_HASH für AWS Cognito mit boto3 erstellen?
  • Füge ein multipart_upload mit boto3 aus?
  • Gibt es eine Python-API zum Einreichen von Batch-Anfragen an AWS DynamoDB?
  • Wie kann ich leicht feststellen, ob eine Boto 3 S3 Eimerressource existiert?
  • Was ist der Unterschied zwischen dem AWS boto und boto3
  • Listing Inhalt eines Eimers mit boto3
  • Python ist die beste Programmiersprache der Welt.