2015-10-21 18 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() 

をしかし、それは動作しません。 Pythonは非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

)。正しいエンコーディング(おそらくutf-8)で開くことができます。また、withステートメントを使用して、ファイルのクローズを処理する必要があります。 Pythonの2.xの

、あなたの代わりにopen()codecs.open()機能を使用することができます - Pythonの3.xの

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

、あなたは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) 
+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エンコーディングを使用してみてください。まず、# - - coding: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ć問題は、ファイルには、ご使用の環境にlocale.getpreferredencoding()によって何が返されることがありますasciiエンコーディング(とopenned取得されていることを

+0

Python 3では、文字列はデフォルトでunicodeオブジェクトです。したがって、 'u'はノーオペレーションです。この回答は有効なものですが、私はそれがOPの問題を解決するとは思いません。 –

関連する問題