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