In boto3, esiste un equivalente di get_contents_to_file
, che copia il contenuto di un oggetto in un handle di file?Equivale a get_contents_to_file in boto3
In boto, se ho un oggetto S3 key
, posso copiare il contenuto in un file temporaneo con:
from tempfile import TemporaryFile
key = code_that_gets_key()
with TemporaryFile() as tmp_file:
key.get_contents_to_file(key, tmpfile)
non ho trovato un equivalente in boto3.
Sono stato in grado di sostituire l'utilizzo di get_contents_to_filename
con download_file
. Tuttavia, questo copre il caso in cui fornisco il nome del file. In questo caso, voglio fornire l'handle del file come argomento.
Attualmente, posso ottenere il codice per lavorare in boto3 scorrendo sul corpo come segue:
with TemporaryFile() as tmp_file:
body = key.get()['Body']
for chunk in iter(lambda: body.read(4096), b''):
filehandle.write(chunk)
Esiste un modo migliore per fare questo in boto3?
Non puoi passare 'tmp_file.name' a' download_file() '? – helloV
@helloV In questo caso potrei usare ['NamedTemporaryFile'] (https://docs.python.org/2/library/tempfile.html#tempfile.NamedTemporaryFile), che ha un nome file. Non sono sicuro che sia una buona idea, dal momento che il metodo 'download_file' aprirà un nuovo handle di file per lo stesso file. In generale, non tutti gli handle di file hanno nomi di file (ad esempio 'StringIO',' TemporaryFile'). – Alasdair
Non è questo ciò che è [download_fileobj] (https://boto3.readthedocs.io/en/latest/reference/services/s3.html#S3.Bucket.download_fileobj)? –