Gibt es in boto3 ein Äquivalent von get_contents_to_file
, das den Inhalt eines Objekts in ein Datei-Handle kopiert?Entspricht get_contents_to_file in boto3
In Boto, wenn ich ein S3-Objekt key
habe, kann ich den Inhalt in eine temporäre Datei kopieren mit:
from tempfile import TemporaryFile
key = code_that_gets_key()
with TemporaryFile() as tmp_file:
key.get_contents_to_file(key, tmpfile)
Ich habe kein Äquivalent in boto3 gefunden.
Ich konnte die Verwendung von get_contents_to_filename
durch download_file
ersetzen. Dies deckt jedoch den Fall ab, in dem ich den Dateinamen zur Verfügung stelle. In diesem Fall möchte ich das Dateihandle als Argument bereitstellen.
Derzeit kann ich den Code bekommen in boto3 zu arbeiten, indem sie über den Körper laufen wie folgt:
with TemporaryFile() as tmp_file:
body = key.get()['Body']
for chunk in iter(lambda: body.read(4096), b''):
filehandle.write(chunk)
Gibt es einen besseren Weg, dies in boto3 zu tun?
Können Sie 'tmp_file.name' nicht an' download_file() 'übergeben? – helloV
@helloV In diesem Fall könnte ich ['NamedTemporaryFile'] (https://docs.python.org/2/library/tempfile.html#tempfile.NamedTemporaryFile) verwenden, das einen Dateinamen hat. Ich bin mir nicht sicher, ob das eine gute Idee ist, da die 'download_file'-Methode ein neues Datei-Handle für dieselbe Datei öffnet. Im Allgemeinen haben nicht alle Dateizugriffsnummern Dateinamen (z. B. "StringIO", "TemporaryFile"). – Alasdair
Ist das nicht das, was [download_fileobj] (https://boto3.readthedocs.io/en/latest/reference/services/s3.html#S3.Bucket.download_fileobj) ist? –