You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 08:15:05