使用chardet检测编码

问题描述 投票:0回答:2

我已经得到了文件的编码,但是编码还是有错误。我不知道如何解决这个问题。有人可以帮帮我吗?

代码:

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'帮助我解决这个问题。

python python-3.x unicode
2个回答
4
投票

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

2
投票

chardet
显然猜错了。尝试给它一个文件实际上与 ASCII 不同的地方的样本(显然在文件后面的某个地方);但要明白
chardet
根本不可能总是猜对。如果您需要正确处理样本,您确实需要知道它们的编码。

© www.soinside.com 2019 - 2024. All rights reserved.