2015-10-21 86 views
5

我正在使用python 3.4,并且正在尝试将一个名称列表写入文本文件。名单如下:Python:使用非ASCII字符将列表写入文本文件

my_list = ['Dejan Živković','Gregg Berhalter','James Stevens','Mike Windischmann', 
       'Gunnar Heiðar Þorvaldsson'] 

我用下面的代码来导出列表:

file = open("/Users/.../Desktop/Name_Python.txt", "w") 
file.writelines("%s\n" % item for item in my_list) 
file.close() 

但它不工作。蟒蛇似乎不喜欢非ASCII字符,并给了我以下错误:

"UnicodeEncodeError: 'ascii' codec can't encode character '\u017d' in position 6: ordinal not in range(128)" 

你知道如果有解决这个问题的方法吗?也许可以用UTF-8/unicode编写文件?

+2

您正在使用哪个版本? –

+0

它的工作原理。 我没有在python 2.7.6中收到任何错误。 –

+0

我正在使用Python 3.4,问题是从那里来的? –

回答

9

的问题是,该文件是越来越openned与ascii编码(这可能是什么locale.getpreferredencoding()为您的环境恢复)。你可以尝试打开正确的编码(可能是utf-8)。另外,您应该使用with语句,以便它为您处理关闭文件。

对于Python 2.x中,你可以使用codecs.open()函数,而不是open() -

with codecs.open("/Users/.../Desktop/Name_Python.txt", "w",encoding='utf-8') as file: 
    file.writelines("%s\n" % item for item in my_list) 

对于Python 3.x中,你可以使用内置的功能open(),支持encoding说法。示例 -

with open("/Users/.../Desktop/Name_Python.txt", "w",encoding='utf-8') as file: 
    file.writelines("%s\n" % item for item in my_list) 
+0

它的工作原理!非常感谢=) –

+0

也为我工作,我很久没有遇到这个问题! – linusg

2

试试这个:

>>> my_list = ['Dejan Živković','Gregg Berhalter','James Stevens','Mike Windischmann' ,'Gunnar Heiðar Þorvaldsson'] 
>>> f = open("/Users/.../Desktop/Name_Python.txt", "w") 
>>> for x in my_list: 
...  f.write("{}\n".format(x)) 
... 
>>> f.close() 
+0

它似乎没有工作。顺便说一句,我使用Python 3,也许问题来自于此? –

+0

@BernEy,我检查了它与python3的工作,是否支持控制台uft-8 – Hackaholic

-1

尝试使用UTF-8编码。您可以从# - 开始 - 编码:utf-8 - - 位于.py文件的顶部。

+1

如果这是问题,文件甚至不会解析 – Eevee

0

最佳方法是玩unicodes

my_list = [u'Dejan \u017Divkovi\u0107','Gregg Berhalter','James Stevens','Mike Windischmann' 
      ,u'Gunnar Hei\u00F0ar \u00FEorvaldsson'] 
print my_list[0] 

输出:Dejan Živković

+0

在Python 3中,默认情况下,字符串是unicode对象。所以'u'是没有任何操作的。这个答案是有效的,但我认为它不能解决OP的问题。 –

相关问题