如何在python中读取utf-8 csv中文文件

时间:2017-02-25 02:08:30

标签: python csv utf-8

我有一个csv文件,其内容全部是中文(标题除外)。因为我想将文件读作字典(其中col标题是键),所以我做了以下内容:

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中读取此文件?

1 个答案:

答案 0 :(得分: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不起作用。您可以尝试将其解析为字节并稍后解码。这通常不是好的做法,但可能是你最好的选择。

您还可以使用pandas满足您的CSV需求,它正确支持unicode

import 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模块不能使用这样的文件。)