Обнаружение символов в текстовом файле в Python с использованием универсального детектора кодирования (chardet)
Я пытаюсь использовать универсальный детектор кодирования (chardet) в Python для обнаружения наиболее вероятной кодировки символов в текстовом файле ( "infile" ) и использовать его для дальнейшей обработки.
Хотя chardet предназначен в первую очередь для обнаружения кодировки символов веб-страниц, я нашел пример, который используется в отдельных текстовых файлах.
Однако я не могу понять, как сообщить script установить наиболее вероятную кодировку символов в переменную 'charenc' (которая используется несколько раз в течение script).
Мой код, основанный на комбинации вышеупомянутого примера и чарта, документации выглядит следующим образом:
import chardet
rawdata=open(infile,"r").read()
chardet.detect(rawdata)
При использовании script требуется распознавание символов, чтобы запустить следующее (а также несколько аналогичных применений):
inF=open(infile,"rb")
s=unicode(inF.read(),charenc)
inF.close()
Любая помощь будет принята с благодарностью.
Ответы
Ответ 1
chardet.detect()
возвращает словарь, который обеспечивает кодировку как значение, связанное с ключом 'encoding'
. Итак, вы можете сделать это:
import chardet
rawdata = open(infile, 'rb').read()
result = chardet.detect(rawdata)
charenc = result['encoding']
Документация chardet
явно не ясна о том, должны ли текстовые строки и/или байтовые строки работать с модулем, но это что если у вас есть текстовая строка, вам не нужно запускать обнаружение символов на ней, поэтому вам, вероятно, следует передавать строки байтов. Следовательно, флаг двоичного режима (b
) в вызове open()
. Но chardet.detect()
может также работать с текстовой строкой в зависимости от того, какие версии Python и библиотеки вы используете, т.е. если вы опускаете b
, вы можете обнаружить, что она работает в любом случае, даже если вы технически делаете что-то неправильно.