【问题标题】:Python: Reading file gives a UnicodeDecodeErrorPython:读取文件会出现 UnicodeDecodeError
【发布时间】:2020-10-07 12:31:41
【问题描述】:

我正在尝试编写一个脚本来清除数据 txt 文件中不必要的字符。我能够成功运行一次脚本,但其他所有尝试都会出现错误 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 文件中复制一些行并将它们放入我在 vim 中创建的单独 .txt 文件中确实会导致脚本每次都成功运行。我知道编解码器可以用于这样的情况,但是当我尝试它时,它给了我类似的错误(因此该行被注释掉了)。

【问题讨论】:

标签: python unicode utf-8


【解决方案1】:

您是否尝试在将其写入 newFile 时先对其进行编码然后再对其进行解码?在读取文件时,在这一行中,您首先必须在读取行时对每一行进行编码,然后在每一行上进行工作,然后再次使用 utf-8 对其进行解码: for line in f: line.encode('utf-8') "your code goes here" line.decode('utf-8') 您可以尝试的另一种解决方案是将 try 和 except 块放在 for 循环中,以检查它是否发生在所有行或几行中,如果它发生在几行中,您可以放弃它们,希望对您有所帮助。

【讨论】:

  • 您的代码存在多个问题。一方面,如果您在处理之前对一行进行编码,这意味着您必须处理字节字符串,如果输入是文本,这几乎不是您想要做的——您想要处理文本.那么没有捕获返回值的语句line.encode('utf8') 是没有目的的——它对变量line(或任何其他变量)没有影响。
  • 事实是:文本在读取时需要解码,在写入时需要“编码”(而不是相反,就像你写的那样)。但是如果你使用@987654324 @ 和 open(..., 'w') 用于打开文件,然后 Python 执行编码步骤,您不能自己调用​​ .encode().decode()
猜你喜欢
  • 2018-12-26
  • 2019-08-08
  • 2013-08-12
  • 2020-05-27
相关资源
最近更新 更多