我有一个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中读取此文件?
答案 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模块不能使用这样的文件。)