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

Posted

技术标签:

【中文标题】Python:将包含非 ASCII 字符的列表写入文本文件【英文标题】:Python: write a list with non-ASCII characters to a text file 【发布时间】:2016-01-20 05:53:42 【问题描述】:

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

【问题讨论】:

你用的是哪个版本? 它有效。我在 python 2.7.6 中没有收到任何错误。 我使用的是 Python 3.4,是不是这个问题? 【参考方案1】:

问题是文件正在使用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 )

【讨论】:

也为我工作过,我为此困扰了很长时间!【参考方案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()

【讨论】:

它似乎不起作用。顺便说一句,我用的是 Python 3,也许问题出在那个? @BernEy,我检查了,它与 python3 一起工作,你的控制台是否支持 uft-8【参考方案3】:

最好的方法是玩unicodes

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

输出:Dejan Živković

【讨论】:

在 Python 3 中,字符串默认是 unicode 对象。所以u 是无操作的。这个答案是正确的,但我认为它不能解决 OP 的问题。【参考方案4】:

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

【讨论】:

如果这是问题所在,文件甚至无法解析

以上是关于Python:将包含非 ASCII 字符的列表写入文本文件的主要内容,如果未能解决你的问题,请参考以下文章

python如何将ascii码转换为字母

非托管 C++ 加密字符串转换为 C# byte[]

蟒蛇 2.7.3 。 . .写入 .jpg/.png 图像文件?

用普通的ascii字符替换重音字符[重复]

如何将 Unicode 字符输出为一对 ASCII 字符?

如何判断字符串中是不是包含任何非 ASCII 字符?