eof
Boris Borcic
bborcic at gmail.com
Thu Nov 22 08:12:52 EST 2007
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.
More information about the Python-list
mailing list