Python文本处理求助:匹配逗号开头行时移除前三行换行符失败
问题分析与解决方案
从你的输入输出示例来看,你实际需要的是:当遇到以逗号开头的行时,将该行内容合并到前一行(你描述的“移除前3行换行符”应该是笔误)。你的代码目前没实现这个逻辑,我来帮你排查问题并修正:
原代码的核心错误
splitlines()已移除换行符:你用splitlines()读取所有行后,lines列表里的元素已经没有\n了,所以调用strip('\n')完全无效;而且strip会返回新字符串,你没把结果赋值回原列表,等于没做任何修改。- 写入逻辑完全错误:循环里最后只执行
fout.write(line),这会导致最终只写入最后一行内容,完全没处理前面的行,也没正确控制换行符的添加/合并。 - 逻辑误解:从输入输出看,你需要合并的是逗号行与它的前一行,而非前3行。
修正后的代码
with open(in_file9, 'r', encoding='utf-8') as fin, open(out_file10, 'w', encoding='utf-8') as fout: lines = fin.read().splitlines() i = 0 while i < len(lines): current_line = lines[i] # 检查下一行是否存在且以逗号开头 if i + 1 < len(lines) and lines[i+1].startswith(','): # 合并当前行与下一行,去掉逗号前可能的空格 merged_line = current_line + lines[i+1].lstrip() fout.write(merged_line + '\n') i += 2 # 跳过已合并的下一行 else: # 正常写入当前行 fout.write(current_line + '\n') i += 1
代码说明
- 用
while循环替代for循环,方便灵活跳过已经合并的行; - 检查当前行的下一行是否符合合并条件,符合则将两行拼接后写入;
- 不需要合并时,直接写入当前行并添加换行符;
- 用
splitlines()读取行可以自动适配不同系统的换行符,避免格式问题。
测试你的输入示例,这段代码会输出你期望的结果:
6.30.230. STLB-Bau: 11/2017 068 Some text, symmety, DIN FFF 1234 (VDE 1.850,000 m
6.30.220. STLB-Bau: 10/2015 123 Some other text, symmetry, DIN FFF 6789 (VDE 950,000 m
如果你的需求确实是要处理前3行,可以补充更详细的场景说明,我再调整代码。
内容的提问来源于stack exchange,提问作者Mady
相关产品推荐
相关产品推荐

