工作原因需要批量讀取大量的csv文件,但由于編碼格式不同read_csv總是報(bào)錯(cuò)常摧,
換了很多編碼格式gbk搅吁、iso-8859-1威创、utf-8、UTF-8-SIG谎懦、GB18030在網(wǎng)上也找了很多高人的方法但都沒(méi)有滿足我的要求肚豺。
后來(lái)我發(fā)現(xiàn)單一的編碼格式解決不了我的問(wèn)題,關(guān)鍵點(diǎn)在中文編碼格式的判斷界拦。
明明csv保存的格式是gb2312吸申,但用gb2312編碼格式去讀反而報(bào)錯(cuò)。
經(jīng)過(guò)反復(fù)試驗(yàn)終于搞定享甸,下面附上代碼:
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': #中文處理方式比較復(fù)雜截碴,gbk如果報(bào)錯(cuò)的話使用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
不知道有沒(méi)有更簡(jiǎn)單的方法,歡迎指正蛉威。