【问题标题】:python write umlauts into filepython将变音符号写入文件
【发布时间】:2017-05-11 22:15:57
【问题描述】:

我有以下输出,我想将其写入文件:

l  = ["Bücher", "Hefte, "Mappen"]

我喜欢这样做:

f = codecs.open("testfile.txt", "a", stdout_encoding)
f.write(l)
f.close()

在我的文本文件中,我想查看:["Bücher", "Hefte, "Mappen"] 而不是 B\xc3\xbccher

有没有什么办法可以在不循环列表和解码每个项目的情况下做到这一点?喜欢给write() 函数任何参数?

非常感谢

【问题讨论】:

  • stdout_encoding 是什么?
  • 对不起它的 utf-8

标签: python file diacritics


【解决方案1】:

首先,确保您使用 unicode 字符串:在字符串中添加“u”前缀:

l  = [u"Bücher", u"Hefte", u"Mappen"]

然后您可以写入或附加到文件:

我建议您使用兼容 Python 2/3 的 io 模块。

with io.open("testfile.txt", mode="a", encoding="UTF8") as fd:
    for line in l:
        fd.write(line + "\n")

要一次性读取您的文本文件:

with io.open("testfile.txt", mode="r", encoding="UTF8") as fd:
    content = fd.read()

结果 content 是一个 Unicode 字符串。

如果您使用 UTF8 编码解码此字符串,您将得到 bytes 字符串,如下所示:

b"B\xc3\xbccher"

编辑使用writelines

writelines() 方法将一系列字符串写入文件。序列可以是任何产生字符串的可迭代对象,通常是字符串列表。没有返回值。

# add new lines
lines = [line + "\n" for line in l]

with io.open("testfile.txt", mode="a", encoding="UTF8") as fd:
    fd.writelines(lines)

【讨论】:

  • 谢谢。如果我应该有一个包含多个列表的输出,我需要分别对列表中的项目进行编码。我没有机会在不知道哪个列表可以包含变音符号而哪个不包含的情况下一步完成所有输出?我正在寻找一种解决方案,它允许我在文件中写入输出,而无需单独循环列表并单独编码字符串。
  • 不清楚你真正想要做什么。仅当您写入(或读取)文件时才需要编码(或解码)。因为文本文件是字节流:内部表示总是一个字节数组。经典用法是为此使用 UTF8 编码。
  • 我想将信息写入 .txt 文件,但我遇到的问题是某些字符串正确显示在文本文件中,例如 Bücher,而列表中的其他字符串显示为 B\xc3\ xbcer.
  • 如果您将 Python 列表直接“写入”到文件中,Python 使用 repr 函数执行带有反斜杠转义的 ASCII 编码。您需要按照我的建议逐行编写。您也可以使用 writelines 但您需要添加一个分隔符,如换行符。查看我的编辑。
猜你喜欢
  • 2018-07-16
  • 1970-01-01
  • 1970-01-01
  • 2016-01-21
  • 2023-03-21
  • 2013-07-06
  • 2018-05-02
  • 1970-01-01
  • 2016-01-03
相关资源
最近更新 更多