Searching a binary file

Bjorn Pettersen bjorn at roguewave.com
Mon Jul 24 13:49:09 EDT 2000


  import string
  string.find( open('my_binary_file','rb').read(), '****' )

-b

luthi at vaw.baug.ethz.NOSPAM.ch wrote:
> 
> What is the fastest way to search a binary file for a certain byte pattern
> (**** in my case)?
> 
> I came up with this solution, but I guess there is a better way to do
> it. Thanks for all suggestions.
> 
> Martin Luethi
> 
> =====
> 
> # constants
> MaxFileSizeInMemory = 10*1000*1000
> 
> file = open('my_binary_file', 'b')
> 
> file.seek(0,2)                   # set the pointer to the end of the file
> filesize = file.tell()           # get the size of the file
> file.seek(0)                     # reset the file pointer
> rex = re.compile(r'[\*]{4}')     # the bytes to search for
> starpointer = []                 # position of the '****' in the file
> oldpos = 0
> for i in range(filesize/MaxFileSizeInMemory + 1):
>     data = self.file.read(MaxFileSizeInMemory) # read a chunk of bytes
>     m = rex.search(data)
>     while m:                     # find all '****' in this chunk
>         pos = m.start() - 4      # corrected for the length of '****'
>         incpointer.append(pos + i*MaxFileSizeInMemory)
>         m = rex.search(data, pos + 10)
>         oldpos = pos
> file.close()                     # close the file
> 
> --
> ============================================================
> Martin Luethi                   Tel. +41 1 632 40 92
> VAW ETH Zuerich
> CH-8092 Zuerich                 mail luthi at vaw.baum.ethz.ch
> Switzerland
> ============================================================
> --
> http://www.python.org/mailman/listinfo/python-list




More information about the Python-list mailing list