【问题标题】:How can I force Python's file.write() to use the same newline format in Windows as in Linux ("\r\n" vs. "\n")?如何强制 Python 的 file.write() 在 Windows 中使用与 Linux 相同的换行符格式(“\r\n”与“\n”)?
【发布时间】:2012-02-29 08:15:54
【问题描述】:

我有简单的代码:

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,而不检查操作系统。

【问题讨论】:

    标签: python newline


    【解决方案1】:

    你仍然可以使用文本模式,当你打印一个字符串时,你会在打印前删除最后一个字符,像这样:

    f.write("FooBar"[:-1])
    

    使用 Python 3.4.2 测试。

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

    【讨论】:

    • 我已经按照建议定义了newline,但是f.write() 命令不会在写入之间自动插入它。该怎么做?
    • @nikhilvj。请阅读相应的文档:write() 不要插入换行符。
    • 好吧,我的错。如果有帮助,我发现一旦在 open() 命令中指定了 newline='\r\n' 或任何内容,我们就不必担心在 write() 命令中放置“正确”换行符。我们只需要说\n,它将被我们配置的自定义换行字符串替换。
    【解决方案2】:

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

    【讨论】:

    • 正如documentation 所述,函数io.open 只是内置函数open 的别名。它们之间没有区别。
    【解决方案3】:

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

    这是 Python 参考中关于open() 的摘录。

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

    【讨论】:

    • 在 Python 3 中,由于没有对字符串进行编码,因此您需要使用outfile.write(bytes(line, "UTF-8")) 之类的内容编写它们以避免TypeError: 'str' does not support the buffer interface
    • 您不需要以二进制模式打开文件,这是解决问题的一种方法,但不是唯一的方法
    猜你喜欢
    • 1970-01-01
    • 2011-06-03
    • 1970-01-01
    • 1970-01-01
    • 2016-11-29
    • 2012-09-15
    • 2014-01-16
    • 2012-04-20
    • 1970-01-01
    相关资源
    最近更新 更多