Python:将包含非ASCII字符的列表写入文本文件

时间:2015-10-21 09:41:08

标签: python list file ascii newline

我使用的是python 3.4,我试图将一个名字列表写入文本文件。清单如下:

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()

但它不起作用。 Python似乎不喜欢非ASCII字符,并给我以下错误:

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

您知道是否有办法解决这个问题?也许可以用UTF-8 / unicode写文件吗?

4 个答案:

答案 0 :(得分:14)

问题是该文件是以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,您可以使用支持encoding参数的内置函数open()。示例 -

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

答案 1 :(得分: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()

答案 2 :(得分: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ć

答案 3 :(得分:-1)

尝试使用UTF-8编码。您可以首先将# - - coding:utf-8 - - 放在.py文件的顶部。