如何在Python中读取UTF-8 CSV中文文件



我有一个CSV文件,内容全部为中文(标题除外)。由于我想将文件读为字典(Col标头是键),因此我做了以下操作:

import csv
d = csv.DictReader(open('file.csv', 'rU')
final = []
for row in d:
    final.append(row)

但是,当我尝试访问值时,值都被打破并像这样显示:

'xe4xb8x8axe6xb5xb7xe5xbaxb7xe8xa1x8dxe6x8axa4xe7x90x86xe7xabx99'

因此,file.csv是一个UTF-8 CSV文件(最初以Excel制成并保存为XLSX,但后来保存为CSV文件)。如何在Python 2.7中读取此文件?

'xe4xb8x8axe6xb5xb7xe5xbaxb7xe8xa1x8dxe6x8axa4xe7x90x86xe7xabx99'是中文文本的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模块无法与此类文件一起使用。)

相关内容

最新更新