You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何Python的print()函数在多次写入时会插入额外换行?

问题解析:print()默认换行在文件读取时的表现差异

场景复现

先看初始的文件写入代码:

with open('days', 'w') as file: 
    for i in ['mon', 'tues']:
        file.write(i)

示例1:无换行写入后的读取输出

读取并打印的代码:

with open('days', 'r') as file:
    for line in file:
        print(line)

# 输出:
# montues

示例2:添加换行写入后的读取输出

修改写入代码添加换行符后:

with open('days', 'w') as file: 
    for i in ['mon', 'tues']:
        file.write(i + '\n')    # 添加换行符
        
with open('days', 'r') as file:
    for line in file:
        print(line)

# 输出:
# mon
# 
# tues

问题:已知print()默认end参数为'\n',为何示例1中未出现该换行?

解答

  1. 示例1的核心原因:
    写入文件时没加换行符,文件内容是完整的一串字符串montues,没有任何\n分割。用for line in file迭代文件对象时,Python是按换行符\n分割行内容的——整个文件里找不到换行符,所以迭代只会得到唯一的一行:montues。
    此时print()虽然会给这行内容加上默认的\n,但因为内容本身没有换行,最终输出就是montues加一个换行(终端里的这个换行是输出结束后的换行,不会在内容中间显示),所以看起来就是一行内容。

  2. 示例2的额外换行原因:
    写入时给每个内容都加了\n,文件里的内容变成mon\ntues\n。迭代文件时,每一行会保留末尾的\n,也就是第一次拿到mon\n,第二次拿到tues\n。print()默认又会给每个输出的字符串追加一个\n,相当于每行内容被输出时带了两个换行符,所以显示出来就是内容行之间多了空行。

如果想避免示例2的空行,可以用print(line, end='')覆盖默认的end参数,或者用line.strip()去掉行末尾的换行符后再打印。


内容的提问来源于stack exchange,提问作者user51462

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.23 09:03:49