如何使用python读取二进制文件时将EOF作为偏移量传递?

时间:2017-09-04 18:47:01

标签: python-2.7 file

我有一个二进制文件。现在,我试图从特定偏移量写入一些值直到EOF。我写了一个方法,但不知道如何将EOF作为偏移量传递。我试图有一个方法,我可以传递起始偏移量和结束偏移量。在这里,我希望结束偏移可以是地址或EOF。如何将EOF作为偏移传递给我的方法?例如,我的开头是129,结束是EOF或偏移,如1129?

def writeValues(start, end=0):
    try:
        with open("current.xof", "r+b") as f:            
            for i in xrange(start, end+1):#write the data
                f.seek(i)            
                f.write("\xAA")           #write data
    except IOError:
        print("Error file not found")

此外,在写入二进制文件时,我最终写入Char值而不是十六进制值。所以要解决这个问题,我尝试了一个解决方案但不满意。我觉得应该有一种更简单的方法。

def updateChecksum(checksum, start, end):
    '''update the checksum in bytes start - end'''
    checksumList= (' '.join(checksum[i: i+2] for i in xrange(0,len(checksum), 2)))
    checksumArr=checksumList.split(" ")

    count  = start

    with open("current.xof", "r+b") as f:
          for i in range(0,len(checksumArr)):
              f.seek(count)
              count  =  count + 1
              f.write('%c' %(int(checksumArr[i], 16)))

2 个答案:

答案 0 :(得分:0)

你可以尝试使用end == 0作为哨兵值,意思是EOF,并自行解释。

def writeValues(start, end=0):
    try:
        with open("current.xof", "r+b") as f:            
            for i in xrange(start, end+1):
                if i == 0:
                    f.seek(0, 2)  # 2 means seek from EOF
                else:
                    f.seek(i)            
                f.write("\xAA")           #write data
    except IOError:
        print("Error file not found")
  

我最终写的是Char值而不是十六进制值。

我不确定这意味着什么。 '\xaa'应该打印字节0xAA

>>> print '\x21'
!

答案 1 :(得分:0)

我最终修改了下面的代码并使其正常工作。有没有办法改善这个?

def writeValues(start, end=0):
    try:
        with open("current.xof", "r+b") as f:
            if end == 0:
                f.seek(0,2)
                end_position = f.tell() #get the end position of the file
                print(end_position)
                for i in xrange(start, end_position+1):
                    f.seek(i)
                    f.write("\x00")
    except IOError:
        print("Error file not found")