2016-12-27 72 views
1

我有以下的输出,这是我想写入文件:蟒蛇写变音符号到文件

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

什么是'stdout_encoding'? – ForceBru

+0

抱歉它的utf-8 – Constantine

回答

2

首先,确保你使用的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() 

结果内容是一个Unicode字符串。

如果使用UTF8编码解码这个字符串,你会得到字节字符串像这样:

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) 
+0

谢谢。在一个案例中,如果我应该有一个包含多个列表的输出,我需要单独对列表中的项目进行编码。我没有机会在不知道哪个列表可能包含元音变音,哪些不变的情况下一步完成所有输出。我正在寻找一种解决方案,它允许我在文件中写入输出,而不用单独循环列表并单独编码字符串。 – Constantine

+0

目前还不清楚你真的想做什么。只有在写入(或读取)文件时才需要进行编码(或解码)。由于文本文件是字节流:内部表示始终是一个字节数组。经典的用法是使用UTF8编码。 –

+0

我想将信息写入.txt文件,并且我遇到了一些字符串正确显示在文本文件中的问题,如Bücher和其他字符串,这些字符串在列表中显示为B \ xc3 \ xbcer。 – Constantine