2017-02-25 15 views
3

内容がすべて中国語(ヘッダを除く)のcsvファイルがあります。私は(COLヘッダーはキーである)辞書としてファイルを読みたいので、私は次のようでした:utf-8 csv中国語ファイルをPythonで読む方法

import csv 
d = csv.DictReader(open('file.csv', 'rU') 

final = [] 
for row in d: 
    final.append(row) 

しかし、私は値にアクセスしようとすると、値がすべて破壊され、次のように現れています

'\xe4\xb8\x8a\xe6\xb5\xb7\xe5\xba\xb7\xe8\xa1\x8d\xe6\x8a\xa4\xe7\x90\x86\xe7\xab\x99' 

したがって、file.csvは、元々はExcelで作成され、xlsxとして保存されましたが、後でcsvファイルとして保存されたUTF-8 csvファイルです。このファイルをPython 2.7でどのように読むことができますか?

答えて

0

'\xe4\xb8\x8a\xe6\xb5\xb7\xe5\xba\xb7\xe8\xa1\x8d\xe6\x8a\xa4\xe7\x90\x86\xe7\xab\x99'は、中国語のテキストのUTF-8バイトです。ユニコードを取得するには、text = your_bytes.decode('utf8')を実行します。

残念ながら、Python 2のcsvモジュールはユニコードでうまく動作しません。バイトとして解析し、後でデコードすることができます。これは通常は良い習慣ではありませんが、あなたの最善の策かもしれません。

ます。また Uあなたには、いくつかは持っているの混乱を共有念のために、リマインダーなどのUnicode適切

輸入IO

In [1]: import io 

In [2]: import pandas as pd 

In [3]: f = io.StringIO(u"""foo,bar,baz,qux 
    ...: 美國精,神醫學,學會是,美國精神 
    ...: 科醫生,的專業,組織在,行內具有 
    ...: 全球性,的影響,力現有,約名會員""") 

In [4]: dataframe = pd.read_csv(f) 

In [5]: dataframe['bar'] 
Out[5]: 
0 神醫學 
1 的專業 
2 的影響 
Name: bar, dtype: object 

In [6]: dataframe.loc[1, :] 
Out[6]: 
foo  科醫生 
bar  的專業 
baz  組織在 
qux 行內具有 
Name: 1, dtype: object 

をサポートし、あなたのCSV必要、のためのパンダを使用することができます

あなたのモードでは、ユニコードではなくユニバーサル改行のためです。テキストファイルをユニコードとして読み込むには、io.openを使用します。 (注:csvモジュールはそのようなファイルでは動作しません)

+0

こんにちは、私はmy_byte.decode( 'utf8')を試しましたが、結果は 'u4e0a \ u6d77 \ u5eb7 \ u884d \ u62a4 \ u7406 \ u7ad9 '、これは正しいですか? – song0089

+0

@ song0089はい、それはユニコード文字列のreprです。テキストが使用されている場所であればどこでも使用できます。それをターミナルに印刷すると、中国語のグリフとして表示されるはずです。GUIにしたければ、それはユーザーにとって適切なものをレンダリングしなければなりません。 –

+0

https://nedbatchelder.com/text/unipain.html –

関連する問題