工作原因需要批量读取大量的csv文件,但由于编码格式不同read_csv总是报错,
换了很多编码格式gbk、iso-8859-1、utf-8、UTF-8-SIG、GB18030在网上也找了很多高人的方法但都没有满足我的要求。
后来我发现单一的编码格式解决不了我的问题,关键点在中文编码格式的判断。
明明csv保存的格式是gb2312,但用gb2312编码格式去读反而报错。
经过反复试验终于搞定,下面附上代码:
def read_csv_diy(paths):
f = open(paths,"rb")
encode = cr.detect(f.read())["encoding"] #得到文件的编码方式
if encode == 'utf-8': #按文件编码方式读取文件
data = pd.read_csv(paths,encoding="utf-8",sep=',')
elif encode == 'GB2312': #中文处理方式比较复杂,gbk如果报错的话使用gb18030方式读取
try:
data = pd.read_csv(paths,encoding="gbk",sep=',')
except UnicodeDecodeError:
data = pd.read_csv(paths,encoding="GB18030",sep=',')
elif encode == 'UTF-8-SIG':
data = pd.read_csv(paths,encoding="UTF-8-SIG",sep=',')
elif encode == "iso-8859-1":
data = pd.read_csv(paths,encoding=="gbk",sep=',')
else :
print(encode)
return data
不知道有没有更简单的方法,欢迎指正。