Duncan Booth wrote: > import itertools > def chunks(f, size): > iterator = iter(f) > def onechunk(line): > yield line > for line in itertools.islice(iterator, size-1): > yield line > for line in iterator: > yield onechunk(line)
Quite simpler, and provides chunk# as well :) def chunked(chunksize,f) : from itertools import count,groupby counter=count(chunksize).next return groupby(f,lambda _ : counter()/chunksize) > > for chunk in chunks(open('chunks.py'), 3): > for n, line in enumerate(chunk): > print "%d:%s" % (n,line.rstrip()) > print "---------------" > print "done" > #eof > ------ end chunks.py -------- > > Ths output when you run this is: > > C:\Temp>chunks.py > 0:import itertools > 1:def chunks(f, size): > 2: iterator = iter(f) > --------------- > 0: def onechunk(line): > 1: yield line > 2: for line in itertools.islice(iterator, size-1): > --------------- > 0: yield line > 1: for line in iterator: > 2: yield onechunk(line) > --------------- > 0: > 1:for chunk in chunks(open('chunks.py'), 3): > 2: for n, line in enumerate(chunk): > --------------- > 0: print "%d:%s" % (n,line.rstrip()) > 1: print "---------------" > 2:print "done" > --------------- > 0:#eof > --------------- > done > > Or change it to do: > > for chunk in chunks(enumerate(open('chunks.py')), 3): > for n, line in chunk: > > and you get all lines numbered from 0 to 15 instead of resetting the > count each chunk. -- http://mail.python.org/mailman/listinfo/python-list