在尝试读取文本文件时,是什么导致Unicode DecodeError?

2024-10-03 21:34:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图在python 3.8中执行此代码段

 def load_rightprob(self, rightprob_file):
        ''' dictionary with # people keys with # actions  '''
        rightProb = {}
        for line in open(rightprob_file):
            items = line.strip().split("\t")
            if len(items) != len(self.action_qid_dict) + 1:
                continue
            pid = int(items[0])


但我得到了这个错误: UnicodeDecodeError: 'utf-8' codec can't decode byte 0xff in position 0: invalid start byte

我尝试了for line in open(rightprob_file, **'rb'**):,但是我在下面的一行遇到了这个错误:

TypeError: a bytes-like object is required, not 'str' 

有人能建议一下如何解决这个问题吗?我正在读取一个.txt文件,其中每一行都是一个ID,后面是377列,表示与该ID关联的概率值

enter image description here 谢谢


Tags: inselfidforlendef代码段错误
1条回答
网友
1楼 · 发布于 2024-10-03 21:34:18

文本文件以0xff开头是非常罕见的。因此,它有时被故意放在文件的开头,作为Unicode Byte Order Mark (BOM)的一部分,特别是在Windows上。正如您在链接中的表中所看到的,只有两种Unicode编码的BOM表以0xff开头:UTF-16或UTF-32,都是小端。在这两种情况中,UTF-16更为常见

因此,请按如下方式打开您的文件:

with open(rightprob_file, 'r', encoding='utf_16_le') as f:
    for line in f:

我添加了with以便在完成时自动关闭该文件,这是原始代码中的一个bug

从文件中读取的第一个字符将是u'\ufeff',可以丢弃或忽略

相关问题 更多 >