Использование chardet для определения кодировки - PullRequest
0 голосов
/ 27 января 2019

Я уже получил кодировку файла, но все еще есть ошибка в кодировке.Я понятия не имею, как решить эту проблему.Может ли кто-нибудь помочь мне?

Код:

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" не может декодировать байт 0xe4в позиции 15: порядковый номер вне диапазона (128)

Ошибка в деталях:

Error

================================================================================

Спасибо всем!

Я сделал это. Я не заметил, что это может быть проблема с одним из файлов . Реальная проблема в том, что один из файлов искажен.Удалите этот файл и попробуйте кодировку = 'utf8', помогите мне решить эту проблему.

Ответы [ 2 ]

0 голосов
/ 27 января 2019

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')
0 голосов
/ 27 января 2019

chardet явно угадывает.Попробуйте дать ему пример того, откуда файл фактически отличается от ASCII (очевидно, где-то позже в файле);но поймите, что chardet просто не всегда может правильно угадать.Если вам нужно, чтобы образцы были правильно обработаны, вам действительно нужно знать их кодировку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...