如何使用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
相关产品推荐
相关产品推荐

