2017-02-25 52 views
3

我有一個csv文件,其內容全部是中文(標題除外)。因爲我想讀取文件作爲字典(其中欄標題是關鍵),我做了以下內容:如何閱讀python中的utf-8 csv中文文件

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是一個UTF-8 csv文件(最初由Excel製作並保存爲xlsx,後來保存爲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字節。要獲得unicode,請執行text = your_bytes.decode('utf8')

不幸的是,Python 2 csv模塊與unicode不兼容。您可以嘗試將其解析爲字節並稍後解碼。這通常不是好的做法,但可能是你最好的選擇。

您也可以使用熊貓爲您的CSV需要,它支持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 

提醒一下,以防萬一你共享的混亂有的有,該U在你的模式下是通用換行符,而不是unicode。要將文本文件讀取爲unicode,請使用io.open。 (注意:csv模塊不會與這樣的文件一起工作。)

+0

嗨,我試過my_byte.decode('utf8'),但我得到的結果是'u4e0a \ u6d77 \ u5eb7 \ u884d \ u62a4 \ u7406 \ u7ad9',這是對的嗎? – song0089

+0

@ song0089是的,這是一個unicode字符串的repr。然後,您可以在使用文本的任何地方使用它。如果你打印到終端,它應該顯示爲中文字形,如果你有它的GUI,它應該爲用戶提供正確的東西,等等。 –

+0

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