gpt4 book ai didi

python遍历没有行的二进制文件

转载 作者:太空宇宙 更新时间:2023-11-04 10:29:46 24 4
gpt4 key购买 nike

我在二进制文件中有一些数据需要解析。数据被分成 22 个字节的 block ,所以我试图生成一个元组列表,每个元组包含 22 个值。虽然文件没有分成几行,所以我在弄清楚如何遍历文件和获取数据时遇到了问题。

如果我这样做,效果会很好:

nextList = f.read(22)
newList = struct.unpack("BBBBBBBBBBBBBBBBBBBBBB", nextList)

其中 newList 包含 22 个值的元组。但是,如果我尝试将类似的逻辑应用于迭代的函数,它就会崩溃。

def getAllData():
listOfAll = []
nextList = f.read(22)
while nextList != "":
listOfAll.append(struct.unpack("BBBBBBBBBBBBBBBBBBBBBB", nextList))
nextList = f.read(22)
return listOfAll

data = getAllData()

给我这个错误:

Traceback (most recent call last):
File "<pyshell#27>", line 1, in <module>
data = getAllData()
File "<pyshell#26>", line 5, in getAllData
listOfAll.append(struct.unpack("BBBBBBBBBBBBBBBBBBBBBB", nextList))
struct.error: unpack requires a bytes object of length 22

我是 python 的新手,所以我不太确定我哪里出错了。我确信文件中的数据会均匀地分成 22 个字节的部分,所以这不是问题。

最佳答案

由于您报告说它在 len(nextList) == 0 时运行,这可能是因为 nextList(不是列表..)是一个不等于空字符串对象的空字节对象:

>>> b"" == ""
False

所以你的行中的条件

while nextList != "":

永远不会为真,即使 nextList 为空。这就是为什么使用 len(nextList) != 22 作为中断条件有效,甚至

while nextList:

应该足够了。

关于python遍历没有行的二进制文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27532738/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com