如何用Python按空行拆分文本文件批量处理生成格式化输出
原代码问题梳理
- 格式化字符串参数不匹配:模板里三处用了
{1}占位,实际只传了1个combine返回值,导致姓名、年龄、爱好位置都显示同一个内容 - 处理逻辑不符合数据结构:每3条带前缀的数据+1条空行才对应1个完整的用户信息,你逐行输出句子,每行只会拿到1个字段,凑不齐完整信息
- 没有处理首尾空白:partition提取冒号后的内容时,会带上前缀后面的空格、行尾换行符,输出格式会错乱
- 空行未过滤:空行调用combine会返回空值,也会被计数输出无效内容
- 文件操作不规范:没有用上下文管理器管理文件句柄,存在资源泄漏风险
最优实现方案(直接处理原始无前缀文件,无需提前加字段前缀)
原始文件本身就是固定的「姓名-年龄-爱好-空行」循环结构,不需要额外改造,直接按块读取处理即可,代码如下:
# 读取原始文件,一次性过滤空行并去除每行首尾空白 with open("原始文件.txt", "r", encoding="utf-8") as f: lines = [line.strip() for line in f if line.strip()] # 每3行对应一个用户的姓名、年龄、爱好 output = [] for i in range(0, len(lines), 3): name, age, hobby = lines[i], lines[i+1], lines[i+2] output.append(f"Hi {name}. You are aged {age} years. You like {hobby}") # 写入结果文件 with open("Result.txt", "w", encoding="utf-8") as f: f.write("\n".join(output))
如果你要继续使用加了前缀的改造文件,修复后的代码如下
with open('profiles.txt', 'r', encoding="utf-8") as doc: lines = [line.strip() for line in doc if line.strip()] output = [] number = 1 # 每3行对应一个用户的三个字段 for i in range(0, len(lines), 3): # 提取三个字段的值,去除冒号后的首尾空白 name = lines[i].partition(':')[2].strip() age = lines[i+1].partition(':')[2].strip() hobby = lines[i+2].partition(':')[2].strip() # 格式化输出内容 line = f"{number}) Hi {name}. You are aged {age} years. You like {hobby}" output.append(line) number += 1 # 批量写入结果 with open('Result.txt', 'w', encoding="utf-8") as f: f.write("\n".join(output))
内容的提问来源于stack exchange,提问作者KarthiDiamond97
相关产品推荐
相关产品推荐

