2015-10-21 115 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的問題。 –

相關問題