finding/replacing a long binary pattern in a .bin file

Jeff Shannon jeff at
Thu Jan 13 14:40:52 EST 2005

Bengt Richter wrote:

> BTW, I'm sure you could write a generator that would take a file name
> and oldbinstring and newbinstring as arguments, and read and yield nice
> os-file-system-friendly disk-sector-multiple chunks, so you could write
>     fout = open('mynewbinfile', 'wb')
>     for buf in updated_file_stream('myoldbinfile','rb', oldbinstring, newbinstring):
>         fout.write(buf)
>     fout.close()

What happens when the bytes to be replaced are broken across a block 
boundary?  ISTM that neither half would be recognized....

I believe that this requires either reading the entire file into 
memory, to scan all at once, or else conditionally matching an 
arbitrary fragment of the end of a block against the beginning of the 
oldbinstring...  Given that the file in question is only a few tens of 
kbytes, I'd think that doing it in one gulp is simpler.  (For a large 
file, chunking it might be necessary, though...)

Jeff Shannon
Credit International

More information about the Python-list mailing list