2012-11-05 22 views
6

Mi piace scrivere uno script boto python per scaricare il file più recente dal s3 bucket, ad es. Ho 100 file in un s3 bucket Ho bisogno di scaricare il file più recente più recente dentro.Script Boto per scaricare l'ultimo file dal secchio s3

C'è un modo per scaricare il file più recente recente da S3 utilizzando python boto.

risposta

12

È possibile elencare tutti i file nel bucket e trovare quello con il più recente (utilizzando l'attributo last_modified).

>>> import boto 
>>> c = boto.connect_s3() 
>>> bucket = c.lookup('mybucketname') 
>>> l = [(k.last_modified, k) for k in bucket] 
>>> key_to_download = sorted(l, cmp=lambda x,y: cmp(x[0], y[0]))[-1][1] 
>>> key_to_download.get_contents_to_filename('myfile') 

Si noti, tuttavia, che questo sarebbe abbastanza inefficiente in voi aveva molti file nel secchio. In tal caso, è possibile prendere in considerazione l'utilizzo di un database per tenere traccia dei file e delle date per rendere più efficiente l'interrogazione.

+0

Grazie, ho capito bene – user1386776

7

Per aggiungere alla risposta di @ garnaat, è possibile risolvere l'inefficienza utilizzando prefix per ridurre i file corrispondenti. Invece di c.lookup, questo esempio potrebbe cercare solo i file nella subdir subbucket che iniziano con file_2014_:

>>> import boto 
>>> c = boto.connect_s3() 
>>> bucket = c.get_bucket('mybucketname') 
>>> bucket_files = bucket.list('subdir/file_2014_') 
>>> l = [(k.last_modified, k) for k in bucket_files] 
>>> key_to_download = sorted(l, cmp=lambda x,y: cmp(x[0], y[0]))[-1][1] 
>>> key_to_download.get_contents_to_filename('target_filename') 
Problemi correlati