我已经得到了文件的编码,但是在编码中仍然存在错误。我不知道如何解决这个问题。有人能帮帮我吗?
代码:
import pandas as pd
import numpy as np
import os
import chardet
os.chdir(r'C:\Users\DELL\Desktop\beijing_20140101-20141231\beijing_20140101-20141231\beijingall')
file_chdir = os.getcwd()
filecsv_list = []
for root,dirs,files in os.walk(file_chdir):
for file in files:
if os.path.splitext(file)[1] == '.csv':
filecsv_list.append(file)
data = pd.DataFrame()
for csv in filecsv_list:
csvc=csv.encode()
encoding=chardet.detect(csvc).get("encoding")
print(encoding)
b=pd.read_csv(csv,encoding=encoding,header=None,sep=',',engine='python')错误: UnicodeDecodeError:'ascii‘编解码器无法解码位置15的字节0xe4 :序数不在范围内(128个)
详细错误:

我已经做好了。我没有注意到这可能是(文件之一)的问题。真正的问题是其中一个文件被混淆了。删除这个文件并尝试编码=‘utf8 8’帮助我解决这个问题。
发布于 2019-01-27 16:19:44
charget是传递样本数据的。您正在传递文件名字符串本身,编码为UTF-8 (其中,ASCII是一个子集),因此您将只返回ascii或utf-8作为回答。使用二进制模式读取文件,或者至少读取其中的一部分,然后将该数据传递给charget.detect()。
for csv in filecsv_list:
with open(csv,'rb') as f:
data = f.read() # or a chunk, f.read(1000000)
encoding=chardet.detect(data).get("encoding")
print(encoding)
b=pd.read_csv(csv,encoding=encoding,header=None,sep=',',engine='python')发布于 2019-10-04 11:17:31
现在有一个替代chardet的方法。也许值得一看。
from charset_normalizer import detect
for csv in filecsv_list:
with open(csv,'rb') as f:
data = f.read() # or a chunk, f.read(1000000)
encoding=detect(data).get("encoding")
print(encoding)
b=pd.read_csv(csv,encoding=encoding,header=None,sep=',',engine='python')另外一个是cchardet,但它是与cpp uchardet的绑定。仍然有希望。
发布于 2019-01-27 16:12:03
chardet显然猜错了。尝试从文件与ASCII实际不同的地方(显然是在文件的后面某个地方)给它一个示例;但是要理解,chardet不能总是正确地猜测。如果需要正确处理样本,则确实需要知道它们的编码。
https://stackoverflow.com/questions/54389780
复制相似问题