Python - 读取 .b4u 文件 - 错误序列项 0:预期的 str 实例,找到的字节

Posted

技术标签:

【中文标题】Python - 读取 .b4u 文件 - 错误序列项 0:预期的 str 实例,找到的字节【英文标题】:Python - Read .b4u files - error sequence item 0: expected str instance, bytes found 【发布时间】:2013-04-14 01:50:08 【问题描述】:

我正在尝试使用http://grantcox.com.au/2012/01/decoding-b4u-binary-file-format/ Python 代码将 .b4u 文件导出为 html 格式,但出于某种原因,在程序点之后:

# find the initial caret position - this changes between files for some reason - search for the "Cards" string
for i in range(3):
    addr = 104 + i*4
    if ''.join(self.parser.read('sssss', addr)) == 'Cards':
        caret = addr + 32
        break
    if caret is None:
        return

我收到以下错误:

if ''.join(self.parser.read('sssss', addr)) == 'Cards':
TypeError: sequence item 0: expected str instance, bytes found

我使用的 Python 版本是:Python 3.3.1 (v3.3.1:d9893d13c628, Apr 6 2013, 20:25:12)。

知道如何解决这个问题吗?

【问题讨论】:

你的问题解决了吗? 【参考方案1】:

我让它在 Python 2.7.4 下工作我的 Python 3.3.2 给了我同样的错误。如果我知道如何将这段代码移植到 Python 3.x.x ,我会回复你 必须与 unicode 作为 Python 3 中字符串的默认值有关。 这是我想出的解决方案:

def read(self, fmt, offset):
    if self.filedata is None:
        return None
    read = struct.unpack_from('<' + fmt, self.filedata, offset)
    xread = []
    for each in range(0,len(read)):
        try:
                xread.append(read[each].decode())
        except:
                xread.append(read[each])
    read = xread
    if len(read) == 1:
        return read[0]
return read

def string(self, offset):
    if self.filedata is None:
        return None
    s = u''
    if offset > 0:
        length = self.read('H', offset)
        for i in range(length):
            raw = self.read('H', offset + i*2 +2)
            char = raw ^ 0x7E
            s = s + chr(char)
    return s

def plain_fixed_string(self, offset):
    if self.filedata is None:
        return None
    plain_bytes = struct.unpack_from('<ssssssssssssssssssssssss', self.filedata, offset)
    xplain_bytes = []
    for each in range(0,len(plain_bytes)):
            try:
                    xplain_bytes.append(plain_bytes[each].decode())
            except:
                    xplain_bytes.append(plain_bytes[each])
    plain_bytes = xplain_bytes
    plain_string = ''.join(plain_bytes).strip('\0x0')
    return plain_string

您可以直接使用这些方法,而不是原作者提供的。 请注意,如果您在任何地方看到它,您还应该将 unicode() 更改为 str() 并将 unichr() 更改为 chr()。还要记住 print 是一个函数,不能在没有括号 () 的情况下使用。

【讨论】:

以上是关于Python - 读取 .b4u 文件 - 错误序列项 0:预期的 str 实例,找到的字节的主要内容,如果未能解决你的问题,请参考以下文章

python读取一个英文文件,并记录每个单词出现的次数,降序输出

小记 用python进行排序

python 2.7文件读取和拆分错误

Python读取内容UnicodeDecodeError错误

从 .xls 文件读取数据时出现 Python 错误

python文件读取:遇见的错误及解决办法