从s3存储桶下载最新文件的Boto脚本

8
我想编写一个Boto Python脚本,以从S3存储桶中下载最近上传的文件。例如,我有一个S3存储桶中有100个文件,我需要下载其中最近上传的文件。
是否有一种方法可以使用Python Boto下载最近修改过的S3文件?
3个回答

14

您可以列出存储桶中的所有文件并查找最近的一个(使用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')

请注意,如果您在存储桶中有大量文件,那么这种方法将非常低效。在这种情况下,您可能需要考虑使用数据库来跟踪文件和日期,以使查询更加高效。


9
为了补充@garnaat的回答,您可以使用前缀来减少匹配的文件,从而解决效率问题。 与c.lookup不同,此示例仅搜索以file_2014_开头的subdir子桶中的文件:
>>> 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')

3

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接