【问题标题】:How to make the file.write() method in Python print new line characters如何使 Python 中的 file.write() 方法打印换行符
【发布时间】:2015-02-16 19:12:16
【问题描述】:

我正在尝试将文本写入明确显示所有换行符(\n\r\r\n)的输出文件。我正在使用 Python 3 和 Windows 7。我的想法是通过将我正在写入的字符串转换为字节来做到这一点。我的代码如下所示:

file_object = open(r'C:\Users\me\output.txt', 'wb')`
for line in lines:
    line = bytes(line, 'UTF-8')  
    print('Line: ', line)   #for debugging
    file_object.write(line)
file_object.close()

标准输出(我的 Windows 终端)的 print() 语句是我想要的。例如,一行看起来像这样,\n 字符可见。

Line: b'<p class="byline">Foo C. Bar</p>\n'

但是,write() 方法不会在我的 output.txt 文件中显式打印任何换行符。为什么write() 没有在我的输出文本文件中显式显示换行符,即使我在字节模式下写入,但print 确实在 Windows 终端中显式显示换行符?

感谢您的建议。

【问题讨论】:

  • 如果你想让它保持可见,你需要逃避它。 \n 具有换行的特殊含义,所有打印功能都尊重这一点。

标签: python newline writing


【解决方案1】:

在将字符串或字节写入文本或二进制文件时,Python 做了什么:

  • 文本文件的字符串。直接写入。
  • 字节到文本文件。写入repr
  • 二进制文件的字符串。引发异常。
  • 字节到二进制文件。直接写入。

当您将bytes 写入标准输出(文本文件)时,您说您得到了您想要的东西。上面的伪表表明您可以考虑使用repr。具体来说,如果您正在寻找输出 b'<p class="byline">Foo C. Bar</p>\n',您正在寻找 reprbytes 对象。如果line 是一个str 开头,而您实际上并不需要b,那么您可能会寻找字符串reprrepr'<p class="byline">Foo C. Bar</p>\n'。如果是这样,你可以这样写:

with open(r'C:\Users\me\output.txt', 'w') as file_object:
    for line in lines:
        file_object.write(repr(line) + '\n')

【讨论】:

  • 这确实有效,非常感谢。我不确定 repr() 的作用。我认为这意味着代表权?是不是有点像转义整个字符串,所以没有特殊的元字符有任何意义?
  • @LeonardShelby:是的,我相信它代表了代表。在 Python 中,有两种方法可以从对象中获取字符串:strrepr。描述差异并不是非常简单,但repr 通常应该看起来更像 Python 代码,可以评估以再次获取对象(我说 看起来更像;实际上不需要) , 而str 只是试图让对象以某种方式成为一个字符串,可能是某种显示格式。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-11-01
  • 1970-01-01
  • 2011-01-19
  • 2011-01-29
  • 1970-01-01
  • 2011-06-28
  • 2018-12-02
相关资源
最近更新 更多