Python如何实现CSV行按名称分组并按头部前置数字排序
Python实现方案
核心思路
不需要显式做分组操作,直接给每行构造双维度排序键即可:第一优先级按后缀的分组字段(s1/s2/s3这类)排序,第二优先级按头部开头的数字排序,就能得到你要的结果。如果有后续分组处理的需求,也可以先分组再分别排序。
代码实现
方案1:直接排序(最简便)
适配你给出的头部格式,无需额外依赖:
# 读取CSV所有行,保留原始内容(因为各行长度不同,不提前拆分字段) with open("你的文件路径.csv", "r", encoding="utf-8") as f: raw_lines = f.readlines() # 按规则排序 sorted_lines = sorted( raw_lines, key=lambda line: ( # 第一排序键:提取分组标识s1/s2/s3,假设头部是行首内容,和后续内容用空格/逗号分隔的话调整分割逻辑即可 line.split("_")[2].split(",")[0].strip(), # 第二排序键:提取开头的数字转整数,避免字符串排序出现"10"<"2"的问题 int(line.split("_")[0]) ) ) # 写入结果文件 with open("排序后结果.csv", "w", encoding="utf-8") as f: f.writelines(sorted_lines)
方案2:先分组再排序(适合需要对分组单独处理的场景)
如果需要对每个分组的内容做额外操作,可以用分组实现:
from collections import defaultdict line_groups = defaultdict(list) with open("你的文件路径.csv", "r", encoding="utf-8") as f: for line in f: # 提取分组标识 group_key = line.split("_")[2].split(",")[0].strip() line_groups[group_key].append(line) sorted_result = [] # 按分组标识顺序遍历 for group_key in sorted(line_groups.keys()): # 每个分组内按开头数字排序后合并到结果 sorted_group = sorted(line_groups[group_key], key=lambda x: int(x.split("_")[0])) sorted_result.extend(sorted_group) # 写入结果 with open("排序后结果.csv", "w", encoding="utf-8") as f: f.writelines(sorted_result)
注意事项
- 如果头部和后续内容的分隔符不是逗号/空格,调整
split的参数即可 - 如果开头的数字是固定长度的零填充格式(比如两位固定是00/04/08),也可以不用转int,直接用字符串排序
- 以上代码用你给出的示例输入测试,输出结果完全符合需求
内容的提问来源于stack exchange,提问作者Iva
相关产品推荐
相关产品推荐

