【问题标题】:Python 3: Issue writing new lines along side unicode to text filePython 3:将 unicode 旁边的新行写入文本文件的问题
【发布时间】:2016-05-09 01:11:44
【问题描述】:

我在 python 3 中编写文本文件的标题时遇到了问题。 我有一个包含 unicode 和换行符的标题。以下是一个最小的工作示例:

with open('my_log.txt', 'wb') as my_file:
    str_1 = '\u2588\u2588\u2588\u2588\u2588\n\u2588\u2588\u2588\u2588\u2588'
    str_2 = 'regular ascii\nregular ascii'
    my_file.write(str_1.encode('utf8'))
    my_file.write(bytes(str_2, 'UTF-8'))

上面的工作,除了输出文件没有新行(基本上看起来我用''替换了'\n')。像下面这样:

████████regular asciiregular ascii

我期待:

████
████
regular ascii
regular ascii

我尝试用 u'\u000A' 和其他基于类似问题的字符替换 '\n' - 但我得到了相同的结果。

另一个可能相关的问题:我知道使用上述编码和字节方法让我的生活变得更加艰难。仍然习惯于 py3 中的 unicode,所以任何关于这方面的建议都会很棒,谢谢!

编辑 基于 Ignacio 的回应和更多研究:以下似乎产生了预期的结果(基本上从 '\n' 转换为 '\r\n' 并确保所有行的编码都是正确的):

with open('my_log.txt', 'wb') as my_file:
    str_1 = '\u2588\u2588\u2588\u2588\u2588\r\n\u2588\u2588\u2588\u2588\u2588'
    str_2 = '\r\nregular ascii\r\nregular ascii'
    my_file.write(str_1.encode('utf8'))
    my_file.write(str_2.encode('utf8'))

【问题讨论】:

  • 我认为如果需要,最好用编码更改为文本模式并让 Python 更改 \n

标签: python-3.x text unicode newline file-writing


【解决方案1】:

既然您提到需要在 Python 3 上使用 Unicode 的建议...

您可能正在使用 Windows,因为 \n 在二进制模式下无法正常工作。 Linux 使用 \n 文本行结尾,但 Windows 使用 \r\n

以文本模式打开文件并声明所需的编码,然后只需编写 Unicode 字符串。下面是一个包含不同 Unicode 转义码的示例:

#coding:utf8
str_1 = '''\
\u2588\N{FULL BLOCK}\U00002588█
regular ascii'''

with open('my_log.txt', 'w', encoding='utf8') as my_file:
    my_file.write(str_1)

您可以使用四位转义符\uxxxx、八位转义符\Uxxxxxxxx 或Unicode 代码点\N{codepoint_name}。只要有#coding:声明,并且源代码文件保存在声明的编码中,文件中也可以直接使用Unicode字符。

请注意,Python 3 的默认源编码是 utf8,所以我上面使用的声明是可选的,但在 Python 2 上,默认是 ascii。源编码不必与用于打开文件的编码匹配。

使用wwt 编写文本(t 是默认设置)。在 Windows 上,\n 将在文本模式下转换为 \r\n

【讨论】:

  • 非常有帮助 - 谢谢!
【解决方案2】:

'wb'

文件以二进制模式打开。因此,\n 不会被翻译成原生换行格式。如果您在不将 LF 视为换行符的文本编辑器中打开文件,则所有文本将显示在编辑器中的一行上。在文本模式下使用适当的编码打开文件,或者在写入之前手动翻译换行符。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-25
    • 1970-01-01
    • 2014-07-07
    • 1970-01-01
    • 2021-08-28
    • 1970-01-01
    • 2021-05-07
    相关资源
    最近更新 更多