如何强制Python的file.write()在Windows中使用与Linux相同的换行格式("\r\n"与"\n")?

76 投票
3 回答
144358 浏览
提问于 2025-04-17 12:32

我有一段简单的代码:

f = open('out.txt','w')
f.write('line1\n')
f.write('line2')
f.close()

这段代码在Windows上运行时文件大小是 12 字节,而在Linux上是 11 字节。原因就是换行符的不同。

在Linux系统中,换行符是 \n,而在Windows系统中,换行符是 \r\n

不过在我的代码里,我指定的换行符是 \n。我的问题是,怎么才能让Python始终使用 \n 作为换行符,而不去考虑操作系统的不同呢?

3 个回答

11

这是一个旧的回答,不过 io.open 函数可以让你指定行结束符:

import io
with io.open('tmpfile', 'w', newline='\r\n') as f:
    f.write(u'foo\nbar\nbaz\n')

来源: https://stackoverflow.com/a/2642121/6271889

28

你可以使用文本模式,同时也能把 '\n' 当作换行符来用。为了做到这一点,你在打开文件的时候需要设置一个参数 newline

f = open("./foo",'w',newline='\n')

f.write("Zeile 1\n")
print("Noch eine Zeile", file=f)

这个方法是在 Python 3.4.2 版本测试过的,不能在 Python 2.7 版本中使用。

106

你需要以 二进制模式 打开文件,也就是用 wb 而不是 w。如果不这样做,换行符会自动转换成你操作系统特定的格式。

下面是Python参考文档中关于 open() 的一段摘录。

默认情况下是使用文本模式,这样在写入时可能会把 '\n' 字符转换成特定平台的表示方式,而在读取时又会转换回来。

撰写回答