【问题标题】:How to identify the current position in a file while reading a hex file(.dat) in python?在python中读取十六进制文件(.dat)时如何识别文件中的当前位置?
【发布时间】:2020-01-03 08:58:51
【问题描述】:

我正在做一个项目,我必须阅读.dat file 并从中提取必要的值。我需要自动化整个过程,即单击一下我想要来自该.dat 文件的所有必要值。它的搜索过程有点复杂。

现在我想要的只是某种方法,我可以创建一个函数,借助该函数我可以获取我已读取字节数的当前位置。例如:如果我通过一个调用函数从.dat 文件中读取前 8 个字节,那么我想要一个函数来告诉我当前位置(即像一个计数器,它可以检查我已读取的字节数总计)。

如果我调用三个函数,其中第一个函数读取 8 个字节,第二个函数读取 4 个字节,第三个函数再次读取 8 个字节,那么我想要一些方法来获取当前位置,在本例中为 8+4 +8=20。

希望你能理解我的担忧。

routeHead_len=8
def readDAT(filename):
    with open(filename,'rb') as f:
        global data
        data=f.read()
    return data

def readRouteHead():                            
    route_Head=[]
    for i in range(routeHead_len):
        route_Head.append(data[i])
    return route_Head

【问题讨论】:

  • 寻找和告诉就足够了。只需在打开的文件对象上调用它
  • @bigdataolddriver 但先生,我希望当前位置达到我已读取的字节数..

标签: python-3.x byte file-read hex-editors


【解决方案1】:

bytesio 解决了一个偷偷摸摸的方法
并受益于 io 函数族

import io
allData = open("/bin/bash",'rb').read()
fp = io.BytesIO(allData)
print("before {}, length {} after {}".format(fp.tell(), len(fp.read(8)),fp.tell()))
print("before {}, length {} after {}".format(fp.tell(), len(fp.read(4)),fp.tell()))
print("before {}, length {} after {}".format(fp.tell(), len(fp.read(8)),fp.tell()))

output:
before 0, length 8 after 8
before 8, length 4 after 12
before 12, length 8 after 20

【讨论】:

  • 是的,先生,这将非常困难..我调用了 readDAT 函数(它将读取完整的文件并将其存储在名为“data”的缓冲区中),之后我使用 for 循环通过数据提取值..但按照你的方法我将无法这样做..我需要分段读取 dat 文件..意味着我必须读取前 8 个字节,然后是 4 个字节,然后是 n*4 字节(这里 n 是动态的)和等等..那么最好的方法是什么..
猜你喜欢
  • 2016-07-15
  • 2013-04-30
  • 1970-01-01
  • 1970-01-01
  • 2012-04-04
  • 2021-09-24
  • 2015-01-26
  • 2020-08-16
  • 2015-07-30
相关资源
最近更新 更多