如何按每组首行对文本文件多行条目字母排序并保留关联信息
按4行一组的首行排序并保持组内信息完整的Python实现
需求说明
文本文件中每4行对应一位人员的完整信息(姓名、电话号码、邮箱地址、住址),需按姓名行进行字母排序,同时保留每位人员的关联信息不拆分。
原文件内容
Bob Steven 02847661723 Bob@mail.com Bob Street 121 Alex Ericsson 1233213211 Alex@mail.com Alex Street 112 Chris Philips 018207129387 Chris@mail.com Christ Street 902
期望排序后内容
Alex Ericsson 1233213211 Alex@mail.com Alex Street 112 Bob Steven 02847661723 Bob@mail.com Bob Street 121 Chris Philips 018207129387 Chris@mail.com Christ Street 902
现有代码问题
现有代码将每一行单独读取并排序,破坏了人员信息的组结构,无法实现需求。
input_filename = "filename.txt" output_filename = "filename.txt" with open(input_filename, "r") as f: l = [line for line in f if line.strip()] l.sort(key=lambda line: line.split()) with open(output_filename, "w") as f: for line in l: f.write(line)
修改后的代码实现
input_filename = "filename.txt" output_filename = "filename.txt" # 读取所有行,保留原始换行符 with open(input_filename, "r") as f: lines = f.readlines() # 将每4行作为一个人员信息组 groups = [lines[i:i+4] for i in range(0, len(lines), 4)] # 按每组的首行(姓名)进行字母排序 groups.sort(key=lambda group: group[0].strip()) # 将排序后的组写入文件 with open(output_filename, "w") as f: for group in groups: f.writelines(group)
代码说明
- 读取所有行:使用
readlines()保留每行的原始换行符,避免后续写入时格式混乱。 - 分组处理:通过列表推导式按步长4对行进行分组,确保每组对应一位人员的完整信息。
- 按姓名排序:排序时以每组的第一行(姓名)为依据,使用
strip()去除首尾空白后再比较,避免换行符影响排序结果。 - 写入文件:遍历排序后的组,使用
writelines()将每组的4行一次性写入文件,保持组内信息完整。
内容的提问来源于stack exchange,提问作者Voltz
相关产品推荐
相关产品推荐

