UnicodeEncodeError при объединении текстовых файлов в Python - PullRequest
0 голосов
/ 14 января 2019

Я начинающий питон. Я пытаюсь добавить (объединить) текст из всех 8 текстовых файлов в один текстовый файл, чтобы сделать корпус. Однако я получаю ошибку UnicodeDecodeError: кодек 'charmap' не может декодировать байт 0x9d в позиции 7311: символ отображается на

 filenames = glob2.glob('Final_Corpus_SOAs/*.txt')  # list of all .txt files in the directory
 print(filenames)

Выход: ['Final_Corpus_SOAs \\ 1.txt', 'Final_Corpus_SOAs \\ 2.txt', 'Final_Corpus_SOAs \\ 2018 SOA Muir.txt', 'Final_Corpus_SOAs \\ 3.txt', 'Final_Corpus_SOAs \\ 4.txt', 'Final_СОК \\ 5.txt ',' Final_Corpus_SOAs \\ 6.txt ',' Final_Corpus_SOAs \\ 7.txt ',' Final_Corpus_SOAs \\ 8.txt ']

with open('output.txt', 'w',encoding="utf-8") as outfile:
for fname in filenames:
    with open(fname) as infile:
        for line in infile:
            outfile.write(line)

Выход: UnicodeDecodeError: кодек 'charmap' не может декодировать байт 0x9d в позиции 7311: символ отображается на неопределенный

Спасибо за помощь.

Ответы [ 2 ]

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

Если вы уверены в кодировке, вы должны объявить ее при открытии файлов, как для чтения, так и для записи:

encoding = 'utf8'    # or 'latin1' or 'cp1252' or...

with open('output.txt', 'w',encoding=encoding) as outfile:
for fname in filenames:
    with open(fname, encoding=encoding) as infile:
        for line in infile:
            outfile.write(line)

Если вы не уверены или не хотите, чтобы вас беспокоило кодирование, вы можете скопировать файлы на уровне байтов, прочитав и записав их в двоичном виде:

with open('output.txt', 'wb') as outfile:
for fname in filenames:
    with open(fname, 'rb') as infile:
        for line in infile:
            outfile.write(line)
0 голосов
/ 14 января 2019

Вы должны указать тип кодировки при открытии файла. Пожалуйста, смотрите эту ссылку для получения дополнительной информации. На это уже здесь ответили.

Добавьте encoding="utf8" к вашему коду, как показано ниже

with open('output.txt', 'w', encoding="utf8") as outfile:
for fname in filenames:
    with open(fname) as infile:
        for line in infile:
        outfile.write(line)
...