日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

Pandas读取中文文本文件报错:python ‘utf-8‘ codec can‘t decode byte 0xe3 in position 0: unexpected end of data

發(fā)布時間:2025/4/5 python 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Pandas读取中文文本文件报错:python ‘utf-8‘ codec can‘t decode byte 0xe3 in position 0: unexpected end of data 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

近日用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',用如下代碼進行了判斷,結(jié)果竟然是none。用文本編輯器打開文件,將文件編碼轉(zhuǎn)換為 'utf-8',再次用如下代碼進行判斷,結(jié)果竟然還是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)) #結(jié)果是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)#返回結(jié)果竟然是{'encoding': None, 'confidence': 0.0, 'language': None} #chardet不可能總是正確的猜測。如果你需要正確處理樣本,你真的需要知道它們的編碼#方法三 #notepad++右下角也能看到編碼,結(jié)果是utf-8

說明,文件的部分數(shù)據(jù)有問題,在網(wǎng)上找了很多方法,都不能解決問題。

隨后,用如下代碼找到了錯誤出現(xiàn)的行,錯誤出現(xiàn)在最后一行。

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))

重新看報錯原因,才發(fā)現(xiàn)“unexpected end of data”,這不也是在說最后一行嗎?

觀察了下最后一行的數(shù)據(jù),文件有6列數(shù)據(jù),然而最后一行只有3列數(shù)據(jù),最后3列數(shù)據(jù)為空,手動將最后3列數(shù)據(jù)補全,問題解決。

總結(jié):仔細讀報錯原因,報錯原因其實已經(jīng)告訴了解決思路。找出導致出錯所在的代碼行或數(shù)據(jù)行,不要瞎試。

總結(jié)

以上是生活随笔為你收集整理的Pandas读取中文文本文件报错:python ‘utf-8‘ codec can‘t decode byte 0xe3 in position 0: unexpected end of data的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。