首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用chardet检测编码

使用chardet检测编码
EN

Stack Overflow用户
提问于 2019-01-27 15:33:20
回答 3查看 6.1K关注 0票数 1

我已经得到了文件的编码,但是在编码中仍然存在错误。我不知道如何解决这个问题。有人能帮帮我吗?

代码:

代码语言:javascript
复制
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’帮助我解决这个问题。

EN

回答 3

Stack Overflow用户

发布于 2019-01-27 16:19:44

charget是传递样本数据的。您正在传递文件名字符串本身,编码为UTF-8 (其中,ASCII是一个子集),因此您将只返回asciiutf-8作为回答。使用二进制模式读取文件,或者至少读取其中的一部分,然后将该数据传递给charget.detect()

代码语言:javascript
复制
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')
票数 3
EN

Stack Overflow用户

发布于 2019-10-04 11:17:31

现在有一个替代chardet的方法。也许值得一看。

normalizer

代码语言:javascript
复制
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的绑定。仍然有希望。

票数 3
EN

Stack Overflow用户

发布于 2019-01-27 16:12:03

chardet显然猜错了。尝试从文件与ASCII实际不同的地方(显然是在文件的后面某个地方)给它一个示例;但是要理解,chardet不能总是正确地猜测。如果需要正确处理样本,则确实需要知道它们的编码。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54389780

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档