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

时间:2012-11-05 06:20:21

标签: python amazon-s3 boto

我喜欢编写一个boto python脚本来从s3存储桶下载最新的文件,例如我在s3存储桶中有100个文件,我需要下载最近上传的最多文件。

有没有办法使用python boto从S3下载最近修改过的文件。

3 个答案:

答案 0 :(得分: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')

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

答案 1 :(得分:8)

要添加@ garnaat的答案,您可以通过使用prefix来减少匹配的文件来解决效率低下问题。此示例不是c.lookup,而是仅搜索以subdir开头的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')

答案 2 :(得分:3)

S3在存储桶http://docs.aws.amazon.com/AmazonS3/latest/dev/Versioning.html中启动了文件的版本控制功能。

您可以通过调用s3client.listVersions(request)并指定n来获取最新的n个文件。请参阅http://docs.aws.amazon.com/AmazonS3/latest/dev/list-obj-version-enabled-bucket.html

示例在java中。不确定boto是否添加了用于版本控制的API。