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

如何用Python 2合并多格式分隔文件并实现分类排序输出?

三类分隔文件的合并与排序实现(Python 2)

没问题,我来帮你搞定这个Python 2的文件处理需求!咱们得先把三种不同格式的数据统一成相同的结构,再一步步完成合并、排序的操作,下面是具体的实现方案:

核心思路

  • 逐个读取三种格式的文件,把每一行解析成统一的三元组(LastName, FirstName, Gender),消除格式差异
  • 将所有解析好的数据收集到一个列表中统一管理
  • 分别完成合并输出、按LastName升序排序输出、按Gender排序输出三个任务

完整代码实现

# 初始化列表存储所有解析后的记录
all_records = []

# 处理逗号分隔文件
with open('comma_separated.txt', 'r') as f:
    for line in f:
        line = line.strip()
        if not line:  # 跳过空行避免无效数据
            continue
        # 拆分字段并去除每个字段的多余空格
        last_name, first_name, gender = [part.strip() for part in line.split(',')]
        all_records.append((last_name, first_name, gender))

# 处理竖线分隔文件
with open('pipe_separated.txt', 'r') as f:
    for line in f:
        line = line.strip()
        if not line:
            continue
        last_name, first_name, gender = [part.strip() for part in line.split('|')]
        all_records.append((last_name, first_name, gender))

# 处理空格分隔文件(兼容FirstName带空格的情况)
with open('space_separated.txt', 'r') as f:
    for line in f:
        line = line.strip()
        if not line:
            continue
        parts = line.split()
        last_name = parts[0]
        gender = parts[1]
        # 把剩余部分拼接成FirstName(比如"Doe M Jane Ann"会解析成FirstName为"Jane Ann")
        first_name = ' '.join(parts[2:])
        all_records.append((last_name, first_name, gender))

# 1. 合并所有数据输出到文件
with open('merged_output.txt', 'w') as f:
    for record in all_records:
        # 这里用逗号作为输出分隔符,可按需替换成|或空格
        f.write(','.join(record) + '\n')

# 2. 按LastName升序排序后输出
sorted_by_lastname = sorted(all_records, key=lambda x: x[0])
with open('sorted_by_lastname.txt', 'w') as f:
    for record in sorted_by_lastname:
        f.write(','.join(record) + '\n')

# 3. 按Gender排序后输出(可额外添加LastName作为二次排序依据)
# 若需要先按Gender排序,再按LastName排序,把key改成lambda x: (x[2], x[0])
sorted_by_gender = sorted(all_records, key=lambda x: x[2])
with open('sorted_by_gender.txt', 'w') as f:
    for record in sorted_by_gender:
        f.write(','.join(record) + '\n')

关键细节说明

  • 空行过滤:每个文件读取时都会跳过空行,避免无效数据干扰后续处理
  • 空格文件兼容:针对FirstName可能包含空格的情况,用' '.join(parts[2:])拼接剩余字段,保证名字解析正确
  • 排序灵活性:用Python内置的sorted()函数,通过lambda表达式快速指定排序字段,逻辑清晰且高效
  • 输出格式自定义:如果需要其他分隔符的输出文件,只需修改','.join(record)中的逗号即可(比如换成'|'或' ')

注意事项

  • 确保文件路径正确,如果目标文件不在脚本所在目录,要填写完整路径(比如'/home/user/data/comma_separated.txt')
  • 如果文件包含特殊编码(如中文),Python 2中需要用codecs模块读取,示例:
    import codecs
    with codecs.open('comma_separated.txt', 'r', 'utf-8') as f:
        # 后续处理逻辑不变
    
  • 若处理超大规模文件,一次性加载所有数据到内存可能不够用,可考虑分批次处理,但中小文件用该方案完全没问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 04:28:06