S3存储桶报表显示首次修改时间而非最新修改时间问题求助
问题根因
你当前的代码是遍历S3对象时直接覆盖modified字段,遍历顺序默认是按对象名正序排列,因此最终存储的修改时间会是遍历到的最后一个对象的时间,若遍历顺序和上传时间正序一致,就会得到最早上传文件的修改时间。你直接在赋值语句后加reverse=True报错,是因为该参数是排序方法的专属参数,不能直接加在普通赋值语句后。
解决方案
方案1:遍历过程中动态对比保留最新时间
在初始化文件夹属性时,先给modified字段设置UTC时区的最小初始值,遍历每个对象时做时间对比,仅当新对象的修改时间晚于已存储的时间时才更新字段:
# 需提前导入datetime模块 import datetime # 初始化文件夹属性时设置初始值 top_level_folders[folder]['modified'] = datetime.datetime.min.replace(tzinfo=datetime.timezone.utc) # 遍历到每个S3对象时执行以下逻辑替换原有赋值逻辑 if obj.last_modified > top_level_folders[folder]['modified']: top_level_folders[folder]['modified'] = obj.last_modified
方案2:收集所有时间后排序取最新值
如果你希望通过排序的方式实现,可以先把当前文件夹下所有对象的修改时间收集为列表,排序后取最新值:
# 收集当前文件夹下所有对象的修改时间 mod_time_list = [obj.last_modified for obj in 当前文件夹下的所有对象列表] # 倒序排序后第一个元素即为最新修改时间 mod_time_list.sort(reverse=True) top_level_folders[folder]['modified'] = mod_time_list[0]
后续逻辑
你原有的报表行添加逻辑不需要做任何修改,调整赋值逻辑后folder[1]['modified']存储的就会是文件夹下最新文件的修改时间。
内容的提问来源于stack exchange,提问作者IsDobbyFree
相关产品推荐
相关产品推荐

