是否可以根据上次修改日期计算每个后缀/月到达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