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

时间:2012-02-07 21:20:00

标签: python newline

我有简单的代码:

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

代码在Windows上运行并提供文件大小12 bytes,而linux提供11 bytes 原因是新行

在linux中它是\n,而在win中它是\r\n

但在我的代码中,我将新行指定为\n。问题是如何让python始终保持新行\n,而不是检查操作系统。

3 个答案:

答案 0 :(得分:91)

您需要以二进制模式打开文件,即wb而不是w。如果不这样,行尾字符将自动转换为特定于操作系统的字符。

以下是关于open()的Python参考的摘录。

  

默认设置是使用文本模式,它可以在写入时将“\ n”字符转换为特定于平台的表示,并在读取时返回。

答案 1 :(得分:15)

您仍然可以使用textmode并使用关键字参数newline强制换行换行符

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

使用Python 3.4.2进行测试。

编辑:这在Python 2.7中不起作用。

答案 2 :(得分:1)

这是一个旧答案,但 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