如何阅读python中的utf-8 csv中文文件
问题描述:
我有一个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中读取这个文件?
答
'\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模块不会与这样的文件一起工作。)
嗨,我试过my_byte.decode('utf8'),但我得到的结果是'u4e0a \ u6d77 \ u5eb7 \ u884d \ u62a4 \ u7406 \ u7ad9',这是对的吗? – song0089
@ song0089是的,这是一个unicode字符串的repr。然后,您可以在使用文本的任何地方使用它。如果你打印到终端,它应该显示为中文字形,如果你有它的GUI,它应该为用户提供正确的东西,等等。 –
https://nedbatchelder.com/text/unipain.html –