如何强制Python';s file.write()是否在Windows中使用与Linux中相同的换行格式(“vs.”\r\n“vs.”)?
我有简单的代码:如何强制Python';s file.write()是否在Windows中使用与Linux中相同的换行格式(“vs.”\r\n“vs.”)?,python,newline,Python,Newline,我有简单的代码: f = open('out.txt','w') f.write('line1\n') f.write('line2') f.close() 代码在windows上运行,提供文件大小12字节,linux提供11字节 原因是新线 在linux中是\n,而win则是\r\n 但在我的代码中,我将新行指定为\n。问题是如何使python始终保持新行,而不检查操作系统。您需要以二进制模式打开文件,即wb而不是w。否则,行尾字符将自动转换为特定于操作系统的字符 下面是Python参考资料
f = open('out.txt','w')
f.write('line1\n')
f.write('line2')
f.close()
代码在windows上运行,提供文件大小12字节
,linux提供11字节
原因是新线
在linux中是\n
,而win则是\r\n
但在我的代码中,我将新行指定为
\n
。问题是如何使python始终保持新行,而不检查操作系统。您需要以二进制模式打开文件,即wb
而不是w
。否则,行尾字符将自动转换为特定于操作系统的字符
下面是Python参考资料的一段摘录,内容是关于
默认情况下使用文本模式,该模式可以在写入时将“\n”字符转换为平台特定的表示形式,在读取时再转换回平台特定的表示形式
您仍然可以使用textmode,并且在打印字符串时,可以在打印前删除最后一个字符,如下所示:
f.write("FooBar"[:-1])
使用Python 3.4.2进行测试
编辑:这在Python 2.7中不起作用。这是一个旧答案,但是
io.open
函数允许您指定行尾:
import io
with io.open('tmpfile', 'w', newline='\r\n') as f:
f.write(u'foo\nbar\nbaz\n')
From:在Python 3中,由于字符串未编码,因此需要使用类似于
outfile.write(字节(第行,“UTF-8”))的方式写入字符串。
以避免出现类型错误:“str”不支持缓冲区接口。
。无需以二进制模式打开文件,这是解决问题的一种方法,但不是我按照建议定义的换行符的唯一方法,而是f.write()
命令不会在写入之间自动插入此内容。怎么做?@nikhilvj。请阅读相应的文档:write()。如果有帮助的话,我发现一旦在open()命令中指定了newline='\r\n'
或任何东西,我们就不必担心在write()命令中放置“正确”的换行符了。我们只需要说\n
,它将被我们配置的自定义换行符字符串替换。