Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 在python中读取十六进制文件(.dat)时,如何识别文件中的当前位置?_Python 3.x_Byte_File Read_Hex Editors - Fatal编程技术网

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是动态的)等等……那么,什么是最好的方法呢。。