2017-02-25 56 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 –