Python中print()输出多余换行问题的原因与解决方法
多余换行的原因
- 用
for line in f遍历读取文件行时,Python会保留每一行末尾原生的换行符:你的line.txt第一行末尾自带\n换行符,读入内存后第一行的line变量末尾本身就带换行。 - Python内置
print()函数默认会在传入的输出内容末尾自动追加一个换行符,两个换行叠在一起,就导致第一行输出后多换了一次行,两行之间出现多余空行。 - 你观察到的第二行末尾无换行,是因为原文件第二行本身就没有末尾换行符,读入的
line变量末尾不带换行,这里如果直接用默认参数的print()反而会给第二行强行补一个换行,和原文件格式不一致。 - 额外提一句:你现在写的先
split()逐词判断再替换的逻辑有冗余,还可能漏替换带标点的场景(比如Way,、Way.这类和标点连在一起的匹配项),直接对整行做字符串替换即可。
修正代码
下面的代码既可以消除中间多余空行,还能完全保留原文件的换行规则(第一行末尾带换行,最后一行末尾无换行),同时简化替换逻辑:
with open("line.txt") as f: for line in f: # 识别当前行原生是否带末尾换行 line_has_newline = line.endswith('\n') # 去掉末尾换行后执行替换,避免换行符干扰文本处理 processed_content = line.rstrip('\n').replace("Way", "Street") # 按原文件的换行规则控制输出 if line_has_newline: print(processed_content) else: print(processed_content, end='')
运行后输出效果完全符合预期:
ADAMS, Ernie, 166 Winterstreamrose Street NEWLINE, None, 1 Nomorenewlines Street
第一行末尾自带换行,两行之间无多余空行,第二行末尾和原文件一致无额外换行。
内容的提问来源于stack exchange,提问作者Dave
相关产品推荐
相关产品推荐

