I've recently discovered a Python "nifty" regarding
iter(). We've seen this form of iterable file read a million times:
with open('eek.txt', 'rt') as f: for line in f: # Some super-cool stuff!
But!! Did you know you can read arbitrary-length buffers in a similar form? Use the
iter(object, sentinel) form of the call and you can do this:
with open('eek.txt', 'rt') as f: # Use whatever chunk size you want for buff in iter(lambda: f.read(1024), ''): # Super-cool stuff using a 1K buffer!!
The use of
iter(read_chunk, '') is basically saying: "Call
read_chunk until you get an empty string." This could be done with binary files as well. The mode would be
'rb' and the sentinel would be