我有一个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模块无法与此类文件一起使用。)