Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何强制Python';s file.write()是否在Windows中使用与Linux中相同的换行格式(“vs.”\r\n“vs.”)?_Python_Newline - Fatal编程技术网

如何强制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
,它将被我们配置的自定义换行符字符串替换。