AWS S3,获取每个后缀/月的对象列表



是否可以根据上次修改日期计算每个后缀/月到达S3存储桶的新对象数量?假设这是我们桶中的内容:

Name            Last modified
pic01.jpg       2022-01-20
pic02.jpg       2022-01-22
doc01.pdf       2022-01-23
doc02.pdf       2022-01-25
doc03.pdf       2022-01-28
pic11.jpg       2022-02-01
pic12.jpg       2022-02-05
pic13.jpg       2022-02-10
doc11.pdf       2022-02-15

理想的输出:

Suffix      Month       Count
jpg         2022-01     2
pdf         2022-01     3
jpg         2022-02     3
pdf         2022-02     1

这听起来像是一个有趣的挑战,所以我写了这个:

import boto3
suffixes = {}
BUCKET = 'BUCKETNAME'
s3_resource = boto3.resource('s3')
for object in s3_resource.Bucket(BUCKET).objects.all():
key = object.key
month = object.last_modified.strftime("%Y-%m")
if '.' in key:
suffix = key[key.rfind('.') + 1:]
suffixes[(month, suffix)] = suffixes.get((month, suffix), 0) + 1
for key, value in sorted(suffixes.items()):
print(key[1], key[0], value)

它将:

  • 遍历bucket中的所有对象
  • 如果Key包含句点,它将在字典中存储月份和后缀
  • 然后它对字典进行排序并打印内容

输出为:

jpg 2014-03 1
yaml 2021-02 1
overlay 2021-03 1
txt 2021-06 1
py 2021-07 1
txt 2021-09 1
py 2021-10 1
jpg 2022-03 2

最新更新