Pandas读取中文文本文件报错:python ‘utf-8‘ codec can‘t decode byte 0xe3 in position 0: unexpected end of data
近日用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 chardetdef 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 UniversalDetectororiginal_file = r"G:\data.txt"usock = open(original_file, 'rb') detector = UniversalDetector() for line in usock.readlines():detector.feed(line)if detector.done: break detector.close() usock.close() print (detector.result)#返回結果竟然是{'encoding': None, 'confidence': 0.0, 'language': None} #chardet不可能總是正確的猜測。如果你需要正確處理樣本,你真的需要知道它們的編碼#方法三 #notepad++右下角也能看到編碼,結果是utf-8說明,文件的部分數據有問題,在網上找了很多方法,都不能解決問題。
隨后,用如下代碼找到了錯誤出現的行,錯誤出現在最后一行。
f = open(r"G:\data.txt","rb")#二進制格式讀文件 while True:line = f.readline()if not line:breakelse:try:line.decode('utf-8')except:print(str(line))重新看報錯原因,才發現“unexpected end of data”,這不也是在說最后一行嗎?
觀察了下最后一行的數據,文件有6列數據,然而最后一行只有3列數據,最后3列數據為空,手動將最后3列數據補全,問題解決。
總結:仔細讀報錯原因,報錯原因其實已經告訴了解決思路。找出導致出錯所在的代碼行或數據行,不要瞎試。
總結
以上是生活随笔為你收集整理的Pandas读取中文文本文件报错:python ‘utf-8‘ codec can‘t decode byte 0xe3 in position 0: unexpected end of data的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Excel打开csv文件显示乱码问题解决
- 下一篇: Python处理大数据量文本数据思路