Python: чтение файла дает UnicodeDecodeError - PullRequest
0 голосов
/ 17 июня 2020

Я пытаюсь написать сценарий, который очищал бы ненужные символы из текстового файла данных. Мне удалось успешно запустить сценарий один раз, но каждая другая попытка выдает ошибку UnicodeDecodeError: 'utf-8' codec can't decode byte 0xa2 in position 8149: invalid start byte

import codecs
import sys

if len(sys.argv) < 2:
        startFile = "test.txt"
else:
        startFile = sys.argv[1]

finishFile = "newtest.txt"



def cleanFile():
        f = open(startFile, "r")
        #f = codecs.open("GNMFDB.TXT", "r", "utf-8")
        newFile = open(finishFile, "a")

        for line in f:
                line = line.replace("=", "")

                newFile.write(line)


def clearNewFile():
        newFile = open(finishFile, "w")
        newFile.close()


if __name__ == "__main__":
        #startFile = "test.txt"
        #finishFile = "newtest.txt"
        clearNewFile()
        cleanFile()

Я знаю, что проблема связана с попыткой преобразования UTF-8 в строки или что-то в этом роде . Копирование некоторых строк из исходного файла .txt и помещение их в отдельный файл .txt, который я создал в vim, приводит к тому, что сценарий каждый раз запускается успешно. Я знаю, что кодеки можно использовать в подобной ситуации, но когда я попробовал, у меня возникла аналогичная ошибка (отсюда и закомментированная строка).

1 Ответ

0 голосов
/ 17 июня 2020

Вы пытались сначала закодировать его, а затем декодировать при записи в newFile? когда вы читаете файл, в этой строке вам сначала нужно кодировать каждую строку, когда вы читаете строки, затем выполнять свою работу над каждой строкой, а затем снова декодировать ее с помощью utf-8: for line in f: line.encode('utf-8') "your code goes here" line.decode('utf-8') и другое решение, которое вы можете попробовать помещается блок try и except внутри для l oop, чтобы проверить, происходит ли это во всех строках или в нескольких, если это происходит в нескольких строках, вы можете их отбросить, Надеюсь на эту помощь.

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