背景说明
因为个人工作的原因,数据来源的CSV格式文件的编码格式并不固定,所以需要一个可以批量读取不同编码格式的CSV。
逻辑
逻辑就是通过chardet
模块来读取文件的编码格式
chardet.detect(f.read())["encoding"]
这段代码可以输出文件的编码格式
然后通过判断不同的编码格式来分开执行。
整体代码如下
import chardet
import pandas as pd
def read_csv_diy(paths): # 这里需要传一个文件地址
with open(paths,'rb') as f:
encode = chardet.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
fullPath= r"C:\Users\DELL\Desktop\20240110090000.csv"
df = read_csv_diy(fullPath)
print(df)
大家有没有更好的方法呢?
附上参考链接 https://www.jianshu.com/p/6c7ef7620f05