Iterating over a binary file

Peter Otten __peter__ at
Tue Jan 6 21:44:27 CET 2004

Derek wrote:

> Pardon the newbie question, but how can I iterate over blocks of data
> from a binary file (i.e., I can't just iterate over lines, because
> there may be no end-of-line delimiters at all).  Essentially I want to
> to this:
> f = file(filename, 'rb')
> data =
> while len(data) > 0:
>     someobj.update(data)
>     data =
> f.close()
> The above code works, but I don't like making two read() calls.  Any
> way to avoid it, or a more elegant syntax?  Thanks.

You can tuck away the ugliness in a generator:

def blocks(infile, size=1024):
    while True:
        block =
        if len(block) == 0:
        yield block

#use it:
for data in blocks(f):


More information about the Python-list mailing list