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

