python将变音符写入文件

Con*_*ine 1 python file diacritics

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

l  = ["Bücher", "Hefte, "Mappen"]
Run Code Online (Sandbox Code Playgroud)

我这样做:

f = codecs.open("testfile.txt", "a", stdout_encoding)
f.write(l)
f.close()
Run Code Online (Sandbox Code Playgroud)

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

有没有办法在不遍历列表并解码每个项目的情况下这样做?喜欢给write()函数任何参数吗?

非常感谢

Lau*_*RTE 5

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

l  = [u"Bücher", u"Hefte", u"Mappen"]
Run Code Online (Sandbox Code Playgroud)

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

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

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

要一次阅读文本文件:

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

结果内容是Unicode字符串。

如果使用UTF8编码对该字符串进行解码,则将获得如下所示的字节字符串:

b"B\xc3\xbccher"
Run Code Online (Sandbox Code Playgroud)

使用编辑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)
Run Code Online (Sandbox Code Playgroud)