Iterating over a binary file
Peter Otten
__peter__ at web.de
Tue Jan 6 15:44:27 EST 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 = f.read(1024)
> while len(data) > 0:
> someobj.update(data)
> data = f.read(1024)
> 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 = infile.read(size)
if len(block) == 0:
break
yield block
#use it:
for data in blocks(f):
someobj.update(data)
Peter
More information about the Python-list
mailing list