On Tue, 29 Nov 2005 17:40:08 GMT, Thomas Liesner <[EMAIL PROTECTED]> wrote:
>Hello all, > >i am having some hard time to format the output of my small script. I am >opening a file which containes just a very long string of hexdata >seperated by spaces. Using split() i can split this string into single >words and print them on stdout. So far so good. But i want to print always >three of them in a single line and after that a linebreak. > >So instead of: > >3905 >3009 >0000 >4508 >f504 >0000 >3707 >5a07 >0000 >etc... > >i'd like to have: > >3905 3009 0000 >4508 f504 0000 >3707 5a07 0000 >etc... > >This is the codesnippet i am using: > >#!/usr/bin/python > >import string >inp = open("xyplan.nobreaks","r") >data = inp.read() >for words in data.split(): > print words >inp.close() > >Any hints? > Using StringIO(""" ... """) in place of open("xyplan.nobreaks","r"), (BTW, "r" is the default, and can be left out) >>> from StringIO import StringIO >>> ins = (line.strip() for line in StringIO("""\ ... 3905 ... 3009 ... 0000 ... 4508 ... f504 ... 0000 ... 3707 ... 5a07 ... 0000 ... """)) >>> for tup in zip(ins, ins, ins): ... print '%s %s %s' % tup ... 3905 3009 0000 4508 f504 0000 3707 5a07 0000 Or if the zip(it, it) grouping idiom is not politically correct, you could use itertool.izip instead, or groupby with a grouping function that returns changing constants for each group of three, e.g., >>> from StringIO import StringIO >>> ins = (line.strip() for line in StringIO("""\ ... 3905 ... 3009 ... 0000 ... 4508 ... f504 ... 0000 ... 3707 ... 5a07 ... 0000 ... """)) >>> import itertools >>> for k,g in itertools.groupby(ins, lambda _, c=itertools.count().next: >>> c()//3): ... print '%s %s %s' % tuple(g) ... 3905 3009 0000 4508 f504 0000 3707 5a07 0000 Regards, Bengt Richter -- http://mail.python.org/mailman/listinfo/python-list