我已经得到了文件的编码,但是编码还是有错误。我不知道如何解决这个问题。有人可以帮帮我吗?
代码:
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)中
详细错误:
我已经完成了。我没有注意到这可能是其中一个文件的问题。真正的问题是其中一个文件是乱码。删除这个文件并尝试encoding='utf8'帮助我解决这个问题。
chardet
是传递的样本数据。您正在传递文件名字符串本身,编码为 UTF-8(其中 ASCII 是一个子集),因此您只能返回 ascii
或 utf-8
作为答案。使用二进制模式读取文件或至少部分文件,然后将该数据传递给 chardet.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')
chardet
显然猜错了。尝试给它一个文件实际上与 ASCII 不同的地方的样本(显然在文件后面的某个地方);但要明白 chardet
根本不可能总是猜对。如果您需要正确处理样本,您确实需要知道它们的编码。