Python 3.x 在python中读取十六进制文件(.dat)时,如何识别文件中的当前位置?
我正在做一个项目,我必须读取Python 3.x 在python中读取十六进制文件(.dat)时,如何识别文件中的当前位置?,python-3.x,byte,file-read,hex-editors,Python 3.x,Byte,File Read,Hex Editors,我正在做一个项目,我必须读取.dat文件,并从中提取必要的值。我需要自动完成整个过程,即只需单击一次,我就需要该.dat文件中的所有必要值。它的搜索过程有点复杂 现在我想要的是,我可以创建一个函数,借助它,我可以得到当前的位置,我已经读取了字节数。例如:如果调用函数,我通过它从.dat文件中读取前8个字节,那么我需要一个函数来告诉我当前位置(例如,像计数器一样,它检查我总共读取的字节数) 如果我调用三个函数,其中第一个函数读取8个字节,第二个函数读取4个字节,第三个函数再次调用8个字节,那么我需
.dat文件
,并从中提取必要的值。我需要自动完成整个过程,即只需单击一次,我就需要该.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
一种偷偷摸摸的方法是由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
一种偷偷摸摸的方法是由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
寻找和讲述就足够了。只需在打开的文件中调用它object@bigdataolddriver但长官,我希望当前位置达到我读到的字节数,搜索和告诉就足够了。只需在打开的文件中调用它object@bigdataolddriver但是,先生,我希望当前位置达到我读取的字节数。是的,先生,这将非常困难。我调用了readDAT函数(它将读取完整的文件并将其存储在名为“data”的缓冲区中)之后,我将使用for循环通过数据提取值..但按照您的方法,我将无法这样做..我需要分段读取dat文件..意味着我必须先读取8个字节,然后读取4个字节,然后读取n*4个字节(这里n是动态的)等等..那么什么是最好的方法..是的,先生,这将非常困难..我调用了readDAT函数(它将读取完整的文件并将其存储在名为“data”的缓冲区中)之后,我将使用for循环通过数据提取值..但根据您的方法,我将无法这样做..我需要以段形式读取dat文件..意味着我必须先读取8个字节,然后读取4个字节,然后再读取n*4个字节(这里n是动态的)等等……那么,什么是最好的方法呢。。