Peter Otten wrote: > from itertools import izip, chain, repeat > > def prt_files (file1, file2): > file1 = chain(file1, repeat("")) > file2 = chain(file2, repeat("")) > for line1, line2 in iter(izip(file1, file2).next, ("", "")): > print line1.rstrip(), "\t", line2.rstrip() > > which can easily be generalized for an arbitrary number of files.
Generalizing for an arbitrary number of files and for an arbitrary value to pad out the shorter sequences: def paddedizip(pad, *args): terminator = [pad] * (len(args)-1) def padder(): if not terminator: return t = terminator.pop() while 1: yield t return izip(*(chain(a, padder()) for a in args)) >>> for (p,q) in paddedizip(0,[1,2,3],[4,5]): print repr(p), repr(q) 1 4 2 5 3 0 >>> for (p,q) in paddedizip(0,[1,2,3],[4,5,6,7,8]): print repr(p), repr(q) 1 4 2 5 3 6 0 7 0 8 >>> for (p,q) in paddedizip("",[1,2,3],[4,5,6,7,8]): print repr(p), repr(q) 1 4 2 5 3 6 '' 7 '' 8 >>> for (p,q,r) in paddedizip(None,[1,2,3],[4,5,6,7,8],[9]): print repr(p), repr(q), repr(r) 1 4 9 2 5 None 3 6 None None 7 None None 8 None -- http://mail.python.org/mailman/listinfo/python-list