[EMAIL PROTECTED] wrote:
Hi,

it's me again with tons of questions. I hava an input file structured
like this:

                  X               XYData-1

                1.                 3.08333
                2.                 9.05526
                3.                 3.13581
                .......

                  X               XYData-2

                1.                 4.08322
                2.                 4.02526
                3.                 3.95891
                ...............

i want to format it so i only get the second column, in order to place
it in a mxn matrix. Let's say i want this:

number1   number2   number3
number4   number5   number6




def iter_data(fileobj, numcols=3):
    i = 0
    keys = [str(j) for j in range(1, numcols+1)]
    for line in fileobj:
        if not line.strip():
            continue
        parts = line.split()
        if len(parts) != 2:
            continue
        key, val = parts[0].strip()[:-1], parts[1].strip()
        if key in keys:
            i = (i % numcols) + 1
            while key > str(i):
                yield None
                i = (i % numcols) + 1
            yield val
        elif i and val.startswith('XYData-'):
            # reset index for a new data row, also padding previous row
            while i < numcols:
                yield None
                i += 1

def iter_coords(numcols):
    row = 0
    while True:
        yield divmod(row, numcols)
        row += 1

from itertools import izip
from StringIO import StringIO

data = '''
                  X               XYData-1

                1.                 3.08333
                2.                 9.05526
                3.                 3.13581

                  X               XYData-2

                2.                 4.02526
                3.                 3.95891

                  X               XYData-3

                1.                 4.08322
                2.                 3.95891

                  X               XYData-4

                1.                 3.08333
                3.                 3.13581

                  X               XYData-5

                1.                 3.08333
                2.                 9.05526
                4.                 3.13581
                5.                 3.13581
'''

print
buf = StringIO(data)
k = 0
for item in iter_data(buf, 5):
    if k % 5 == 0:
        print
    print '|   %s%s' % (item, ' ' * (8-len(str(item)))),
    k += 1

print
buf = StringIO(data)
for item in izip(iter_coords(5), iter_data(buf, 5)):
    print item

print
buf = StringIO(data)
d = dict(izip(iter_coords(5), iter_data(buf, 5)))

print d

++++++++++++++++++++++++++++++++++++++++++++++



|   3.08333  |   9.05526  |   3.13581  |   None     |   None
|   None     |   4.02526  |   3.95891  |   None     |   None
|   4.08322  |   3.95891  |   None     |   None     |   None
|   3.08333  |   None     |   3.13581  |   None     |   None
|   3.08333  |   9.05526  |   None     |   3.13581  |   3.13581
((0, 0), '3.08333')
((0, 1), '9.05526')
((0, 2), '3.13581')
((0, 3), None)
((0, 4), None)
((1, 0), None)
((1, 1), '4.02526')
((1, 2), '3.95891')
((1, 3), None)
((1, 4), None)
((2, 0), '4.08322')
((2, 1), '3.95891')
((2, 2), None)
((2, 3), None)
((2, 4), None)
((3, 0), '3.08333')
((3, 1), None)
((3, 2), '3.13581')
((3, 3), None)
((3, 4), None)
((4, 0), '3.08333')
((4, 1), '9.05526')
((4, 2), None)
((4, 3), '3.13581')
((4, 4), '3.13581')

{(1, 3): None, (3, 0): '3.08333', (2, 1): '3.95891', (0, 3): None, (4, 0): '3.08333', (1, 2): '3.95891', (3, 3): None, (4, 4): '3.13581', (2, 2): None, (4, 1): '9.05526', (1, 1): '4.02526', (3, 2): '3.13581', (0, 0): '3.08333', (0, 4): None, (1, 4): None, (2, 3): None, (4, 2): None, (1, 0): None, (0, 1): '9.05526', (3, 1): None, (2, 4): None, (2, 0): '4.08322', (4, 3): '3.13581', (3, 4): None, (0, 2): '3.13581'}

--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to