使用 python 和 boto 根据时间戳处理 S3 中的文件

process the files in S3 based on their timestamp using python and boto

我正在尝试根据这些文件具有的时间戳来处理 S3 中的文件。我有这段代码,它为我提供了文件的 date modified 属性,然后我解析它以使用 boto.utils.parse_ts 将其转换为适当的格式。现在我想对文件进行排序,如果可能的话,将它们的键名按排序顺序放在 list 中,以便最旧的文件首先进行处理。我该怎么做?

con = S3Connection('', '')
bucket = conn.get_bucket('bucket')
keys = bucket.list('folder1/folder2/')

for key in keys:
    date_modified = parse_ts(key.last_modified)

可能有很多方法可以做到这一点,但这里有一种方法应该有效:

import boto.s3
conn = boto.s3.connect_to_region('us-east-1')
bucket = conn.get_bucket('mybucket')
keys = list(bucket.list(prefix='folder1/folder2/'))
keys.sort(key=lambda k: k.last_modified)

变量 keys 现在应该是 Key 对象的列表,这些对象按 last_modified 属性排序,最旧的在前,最新的在后。

我使用了字典并对值进行了排序。如果需要,这将为您留下名称和 last_modified。否则,一个简单的列表可能会更快。

from boto.s3.connection import S3Connection

conn = S3Connection()  # assumes region/keys setup in .boto
bucket = conn.get_bucket('mybucket')
dict = {key.name:key.last_modified for key in bucket.get_all_keys()}
dict = sorted(dict.items() key=lambda x: x[1]) # lambda sort order <

例如:

from boto.s3.connection import S3Connection
conn = S3Connection()
bucket = conn.get_bucket('cgseller-test')
dict = {key.name:key.last_modified for key in bucket.get_all_keys()}
print dict
>>> {u'newfolder/else': u'2015-04-01T01:33:43.000Z', u'newfolder/file': u'2015-04-01T01:23:51.000Z', u'newfolder/file1': u'2015-04-01T01:23:42.000Z', u'newfolder/file2': u'2015-04-01T01:23:34.000Z'}

dict = sorted(dict.items(), key=lambda x: x[1])
print dict
>>>[(u'newfolder/file2', u'2015-04-01T01:23:34.000Z'), (u'newfolder/file1', u'2015-04-01T01:23:42.000Z'), (u'newfolder/file', u'2015-04-01T01:23:51.000Z'), (u'newfolder/else', u'2015-04-01T01:33:43.000Z')]