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

11

我正在使用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编写文件?


2
你使用的是哪个版本? - Anand S Kumar
它可以工作。 我在Python 2.7.6中没有收到任何错误。 - Mayur Koshti
我正在使用Python 3.4,问题是由于这个引起的吗? - Jb_Eyd
3个回答

18
问题在于该文件使用了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 )

1
我也试过了,我也遇到这个问题很长一段时间! - linusg

1

try this:

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

似乎不起作用。顺便说一下,我使用的是 Python 3,也许问题来自于那里? - Jb_Eyd
@BernEy,我检查过了,它可以在Python3中工作,你的控制台支持UTF-8吗? - Hackaholic

-1

尝试使用UTF-8编码。您可以通过在.py文件顶部放置# -- coding: utf-8 --来开始。


1
如果真的出现了这个问题,那么这个文件甚至都无法解析。 - Eevee

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接