Преобразование всех текстовых файлов с несколькими кодировками в каталоге в текстовые файлы в кодировке utf-8

#python #encoding #utf-8

#python #кодирование #utf-8

Вопрос:

Я новичок в Python и, в целом, в кодировании. Поэтому любая помощь приветствуется.

У меня более 3000 текстовых файлов в одном каталоге с несколькими кодировками. И мне нужно преобразовать их в единую кодировку (например, utf8) для дальнейшей работы с NLP. Когда я проверил тип этих файлов с помощью shell, я определил следующие кодировки:

 Algol 68 source text, ISO-8859 text, with very long lines
Algol 68 source text, Little-endian UTF-16 Unicode text, with very long lines
Algol 68 source text, Non-ISO extended-ASCII text, with very long lines
Algol 68 source text, Non-ISO extended-ASCII text, with very long lines, with LF, NEL line terminators
ASCII text
ASCII text, with very long lines
data
diff output text, ASCII text
ISO-8859 text, with very long lines
ISO-8859 text, with very long lines, with LF, NEL line terminators
Little-endian UTF-16 Unicode text, with very long lines
Non-ISO extended-ASCII text
Non-ISO extended-ASCII text, with very long lines
Non-ISO extended-ASCII text, with very long lines, with LF, NEL line terminators
UTF-8 Unicode (with BOM) text, with CRLF line terminators
UTF-8 Unicode (with BOM) text, with very long lines, with CRLF line terminators
UTF-8 Unicode text, with very long lines, with CRLF line terminators
 

Есть идеи, как преобразовать текстовые файлы с вышеупомянутыми кодировками в текстовые файлы с кодировкой utf-8?

Ответ №1:

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

код приведен ниже:

 import os, sys, codecs
import chardet
 

Во-первых, использование пакета chardet для определения кодировки текста.

 for text in os.listdir(path):
    txtPATH = os.path.join(path, text)
    txtPATH=str(txtPATH)
    

    f = open(txtPATH, 'rb')
    data = f.read()
    f_charInfo = chardet.detect(data)
    coding2=f_charInfo['encoding']
    coding=str(coding2)
    print(coding)
    data = f.read()
 

Во-вторых, если кодировка текста не соответствует utf-8, перепишите текст в каталог в кодировке utf-8.

         if not re.match(r'.*.utf-8

Надеюсь, это поможет! Спасибо



, coding, re.IGNORECASE):
print(txtPATH)
print(coding)

with codecs.open(txtPATH, "r", coding) as sourceFile:
contents = sourceFile.read()

with codecs.open(txtPATH, "w", "utf-8") as targetFile:
targetFile.write(contents)
Надеюсь, это поможет! Спасибо