我有简单的代码:
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
,而不是检查操作系统。
答案 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')