我有以下输出,我想写入文件:
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()
函数赋予任何参数吗?
非常感谢
答案 0 :(得分:5)
首先,确保使用 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)