Michael Spencer wrote:
def output(seq, linelength = 60): if seq: iterseq = iter(seq) while iterseq: print "".join(islice(iterseq,linelength))
Worth noting: "while iterseq" only works because for this case, you have a list iterator, which provides a __len__ method.
Thanks! I had noted that the file iterator didn't behave like this, but I hadn't deduced the reason. Unfortunately, the above construct, while cute, is also not terribly speedy.
>>> print "\n".join(body[-index:-index-linelength:-1] ... for index in xrange(1, len(body), linelength))
is ugly but much faster with an already-existing string
So, my second attempt is:
from itertools import groupby
def revcomp2(input = sys.stdin, linelength = 60): basetable = string.maketrans('ACBDGHKMNSRUTWVYacbdghkmnsrutwvy', 'TGVHCDMKNSYAAWBRTGVHCDMKNSYAAWBR')
def record(item): return item[0] in ">;"
for header, body in groupby(input, record): body = "".join(body) if header: print body, else: body = body.translate(basetable, "\n\r") print "\n".join(body[-index:-index-linelength:-1] for index in xrange(1, len(body), linelength))
Michael
-- http://mail.python.org/mailman/listinfo/python-list