为何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的核心原因:
写入文件时没加换行符,文件内容是完整的一串字符串montues,没有任何\n分割。用for line in file迭代文件对象时,Python是按换行符\n分割行内容的——整个文件里找不到换行符,所以迭代只会得到唯一的一行:montues。
此时print()虽然会给这行内容加上默认的\n,但因为内容本身没有换行,最终输出就是montues加一个换行(终端里的这个换行是输出结束后的换行,不会在内容中间显示),所以看起来就是一行内容。示例2的额外换行原因:
写入时给每个内容都加了\n,文件里的内容变成mon\ntues\n。迭代文件时,每一行会保留末尾的\n,也就是第一次拿到mon\n,第二次拿到tues\n。print()默认又会给每个输出的字符串追加一个\n,相当于每行内容被输出时带了两个换行符,所以显示出来就是内容行之间多了空行。
如果想避免示例2的空行,可以用print(line, end='')覆盖默认的end参数,或者用line.strip()去掉行末尾的换行符后再打印。
内容的提问来源于stack exchange,提问作者user51462
相关产品推荐
相关产品推荐

