近日用pandas的read_csv读取中文文本文件时报错:python 'utf-8' codec can't decode byte 0xe3 in position 0: unexpected end of data。
看到错误以为是读取时encoding选择错误,某个二进制块无法用 'utf-8'读取,不应该选择 'utf-8'。于是将utf-8,gb2312,gb18030,gbk,utf-8-sig,cp936,big5等中文编码都试了一遍,还是没有解决错误。用编码ISO-8859-1读取没有报错,然而读取的是乱码。
要读取的文件,我事先知道是 'utf-8'。为了再次确认是否是 'utf-8',用如下代码进行了判断,结果竟然是none。用文本编辑器打开文件,将文件编码转换为 'utf-8',再次用如下代码进行判断,结果竟然还是none。
#方法一
import pandas as pd
import os
import chardet
def get_encoding(filename):
"""
返回文件编码格式,因为是按行读取,所以比较适合小文件
"""
with open(filename,'rb') as f:
return chardet.detect(f.read())['encoding']
original_file = r"G:\data.txt"
print(get_encoding(original_file))
#结果是None
#方法二
from chardet.universaldetector import UniversalDetect