【问题标题】:How to loop through binary blocks using python and stop at file end?如何使用python遍历二进制块并在文件末尾停止?
【发布时间】:2019-07-17 06:44:23
【问题描述】:

我有一个需要按顺序读取的二进制文件,因为它是由可变大小的块构成的,这些块在开始时会自我描述。

因此,我想遍历一组: + 获取下一个区块结构和限制 + 解析它 + 继续下一个区块。

现在我需要文件已经结束。

由于 python 没有 EOF 检查以放入 while 循环,我该怎么做?

对类似问题的在线回答简单地说,当 file.read() 没有返回任何字节或返回的字节数少于您要求的字节数时,您可以停止解析。

很好,但是在解析一个块之后,我需要读取下一个字节来执行此操作,这很烦人,因为它可能是下一个结构定义的一部分。

在我为解决这个问题而设计的几个 while 循环下面。

【问题讨论】:

    标签: python binaryfiles eof sequential


    【解决方案1】:

    1) 利用 python 中的 file.read(num_of_bytes) 可以告诉你没有更多字节可以读取一个解决方案可能是

    while (dat.read(1)):
        dat.seek(-1,1)
        [your business here]
    

    回溯可让您从上一个块中离开的位置继续。

    2) 如果你知道你的文件在阅读时不会改变,你可以利用它的长度并简单地使用

    flength = os.stat(your_file).st_size # your file size in bytes
    while (dat.tell() < flength):
            [your business here]
    

    利用 .tell() 方法为您提供文件中的字节。

    【讨论】:

      猜你喜欢
      • 2016-03-18
      • 2015-02-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-29
      • 2023-03-11
      • 1970-01-01
      • 2011-12-15
      相关资源
      最近更新 更多