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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 10:48:01