Python文件名列表过滤:按name-subname前缀保留时间最新的文件
解决方案
思路说明
你现有的思路是正确的,先提取所有唯一的name+subname组合,再对每个组合筛选最新文件即可。也可以用单次遍历的方案减少遍历次数,效率更高。
实现代码
方案1:基于你现有代码的后续实现
你已经生成了唯一组合集合name_subname_list,后续可以直接按如下逻辑处理:
result = [] for ns in name_subname_list: # 筛选当前name-subname组合对应的所有文件 matched_files = [f for f in myList if f.startswith(f"{ns}-")] # 按时间戳倒序排序,取第一个就是最新文件 latest_file = sorted( matched_files, key=lambda x: int(x.rpartition('-')[-1].split('.')[0]), reverse=True )[0] result.append(latest_file)
运行后result就是过滤后的目标文件列表。
方案2:更高效的单次遍历实现
不需要提前提取唯一组合,一次遍历即可完成统计,时间复杂度为O(n),适合数据量较大的场景:
latest_map = {} for file in myList: # 拆分得到name-subname组合、时间戳部分 ns, _, ts_suffix = file.rpartition('-') ts = int(ts_suffix.split('.')[0]) # 组合未记录或当前文件时间戳更新,就替换存储 if ns not in latest_map or ts > latest_map[ns][0]: latest_map[ns] = (ts, file) # 提取所有最新文件 result = [v[1] for v in latest_map.values()]
注意事项
- 以上实现默认timestamp的数字格式符合「数值越大时间越新」的规则,和你给出的示例格式一致
rpartition('-')是从字符串右侧查找第一个分隔符,即使name或subname内部包含'-',也能正确拆分出末尾的timestamp部分,适配性更强
内容的提问来源于stack exchange,提问作者Kahalon
相关产品推荐
相关产品推荐

