2015-04-01 72 views
0

我试图根据这些文件具有的时间戳来处理S3中的文件。我有这个代码,它为我提供了文件的date modified属性,然后我使用boto.utils.parse_ts解析它以将其转换为适当的格式。现在我想排序这些文件,并且如果可能的话,按照排序顺序将它们的密钥名称放在list中,以便最早的文件首先进行处理。我怎样才能做到这一点?使用python和boto基于它们的时间戳处理S3中的文件

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

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

回答

1

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

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现在应是由last_modified属性与分类Key对象的列表最老的第一个和最新的最后一个。

+0

感谢您的回答。我有一个问题,但。当我看到'k.last_modified'的时间戳时,我看到的时间与我前往S3时看到的时间不同。 'k.last_modified'是否在不同时区输出时间?我怎样才能将它转换为EST? – user2966197 2015-04-01 14:41:02

+0

存储在S3服务中的时间戳应该是UTC。当你说“如果我去S3”,你的意思是你去AWS管理控制台吗?如果是这样,它可能是本地化您的时区的时间。 – garnaat 2015-04-01 14:43:06

+0

是的,我的意思是AWS管理控制台。 – user2966197 2015-04-01 14:49:24

2

我使用了一个字典并对值进行排序。如果你需要它,这会给你留下名字和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')]