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

如何使用Python从文件夹中获取同系列文件的最新版本并处理

需求实现方案

核心逻辑

  • 先解析文件名规则:从示例可知,同系列文件的前缀(最后一个.之前的内容)为系列唯一标识,最后一个.和后缀之间的内容为版本号,版本号数值越大版本越新
  • 按系列分组存储所有文件,每组内取版本号最大的文件即为待处理目标

Python实现代码

import os

def get_latest_files(folder_path):
    # 存储格式:{系列标识: (最大版本号, 文件名)}
    series_dict = {}
    
    for filename in os.listdir(folder_path):
        # 只处理文件,跳过子目录
        file_path = os.path.join(folder_path, filename)
        if not os.path.isfile(file_path):
            continue
            
        # 拆分文件名和后缀
        name_part, ext = os.path.splitext(filename)
        # 按最后一个点拆分系列标识和版本号
        if '.' not in name_part:
            # 不符合命名规则的文件直接保留,可根据需求调整
            series_dict[filename] = (0, filename)
            continue
            
        series_name, version_str = name_part.rsplit('.', 1)
        # 版本号转整数比较,避免字符串比较的顺序错误
        try:
            version = int(version_str)
        except ValueError:
            # 版本号不是数字的文件直接保留
            series_dict[filename] = (0, filename)
            continue
            
        # 更新同系列的最大版本文件
        if series_name not in series_dict or version > series_dict[series_name][0]:
            series_dict[series_name] = (version, filename)
    
    # 提取所有待处理的文件名
    target_files = [item[1] for item in series_dict.values()]
    return target_files

# 调用示例
if __name__ == "__main__":
    # 替换为你的目标文件夹路径
    FOLDER_PATH = "./your_target_folder"
    result = get_latest_files(FOLDER_PATH)
    print("待处理的目标文件:")
    for file in result:
        print(file)

验证效果

将示例文件放在目标文件夹下运行代码,输出结果为:

ABC2021Q1.03.txt
CDE2021Q2.01.txt
CDE2021Q3.02.txt

和需求要求的目标文件完全一致。

扩展说明

  • 如果你的文件命名规则有变化,可以调整name_part.rsplit('.', 1)部分的解析逻辑
  • 如果版本号支持小数格式,把int(version_str)改成float(version_str)即可
  • 不需要处理的文件格式可以在遍历的时候加过滤条件,比如仅处理.txt后缀的文件

内容的提问来源于stack exchange,提问作者Sandysql

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 19:24:03