如何用Python按mode、不同seed及相同speed分组CSV文件路径
Python按mode、相同speed分组CSV文件路径
需求说明
给定一组CSV文件绝对路径,需按相同mode、相同speed,不同seed的规则分组。文件命名格式为绝对路径/(mode)(seed)_speedX.csv,最终输出需将路径中的alpha2转换为alpha_2、beta1转换为beta_1,匹配指定格式。
解决方案代码
import os from collections import defaultdict csv_filepaths = [ 'C:/Users/DELL/Documents/abc/alpha_586893215_speed0.csv', 'C:/Users/DELL/Documents/abc/alpha_586893215_speed4.csv', 'C:/Users/DELL/Documents/abc/alpha2_123456787_speed0.csv', 'C:/Users/DELL/Documents/abc/alpha2_123456787_speed4.csv', 'C:/Users/DELL/Documents/abc/alpha2_886589746_speed0.csv', 'C:/Users/DELL/Documents/abc/alpha2_886589746_speed4.csv', 'C:/Users/DELL/Documents/abc/beta1_52186893215_speed0.csv', 'C:/Users/DELL/Documents/abc/beta1_52186893215_speed4.csv', 'C:/Users/DELL/Documents/abc/beta1_86893215_speed0.csv', 'C:/Users/DELL/Documents/abc/beta1_86893215_speed4.csv' ] # 初始化分组字典,键为(mode, speed),值为对应路径列表 groups = defaultdict(list) for path in csv_filepaths: # 提取文件名并拆分关键部分 filename = os.path.basename(path) name_part, speed_str = filename.replace('.csv', '').split('_speed') speed = f"speed{speed_str}" # 分离mode和seed last_underscore = name_part.rfind('_') mode = name_part[:last_underscore] # 转换mode格式以匹配输出要求 mode_map = {'alpha2': 'alpha_2', 'beta1': 'beta_1'} mode = mode_map.get(mode, mode) # 转换路径格式 formatted_path = path for old, new in mode_map.items(): if old in formatted_path: formatted_path = formatted_path.replace(old, new) # 加入对应分组 groups[(mode, speed)].append(formatted_path) # 按speed、mode排序后输出 sorted_groups = sorted(groups.values(), key=lambda x: (int(x[0].split('_speed')[-1].replace('.csv', '')), x[0].split('/')[-1].split('_')[0])) for group in sorted_groups: print(group)
运行结果
['C:/Users/DELL/Documents/abc/alpha_586893215_speed0.csv'] ['C:/Users/DELL/Documents/abc/alpha_2_123456787_speed0.csv', 'C:/Users/DELL/Documents/abc/alpha_2_886589746_speed0.csv'] ['C:/Users/DELL/Documents/abc/beta_1_52186893215_speed0.csv', 'C:/Users/DELL/Documents/abc/beta_1_86893215_speed0.csv'] ['C:/Users/DELL/Documents/abc/alpha_586893215_speed4.csv'] ['C:/Users/DELL/Documents/abc/alpha_2_123456787_speed4.csv', 'C:/Users/DELL/Documents/abc/alpha_2_886589746_speed4.csv'] ['C:/Users/DELL/Documents/abc/beta_1_52186893215_speed4.csv', 'C:/Users/DELL/Documents/abc/beta_1_86893215_speed4.csv']
内容的提问来源于stack exchange,提问作者Muhammad Abdur Rehman Siddiqui
相关产品推荐
相关产品推荐

