[Tutor] manipulating data

Michael H. Goldwasser goldwamh at slu.edu
Thu Nov 15 18:04:16 CET 2007


On Monday November 12, 2007, Bryan Fodness wrote: 

>    I try this,
>    
>    f = open('TEST1.MLC')
>    
>    fields = {}
>    
>    for line in f:
>        if line.split()[0] == 'Field':
>            field = int(line.split()[-1])
>        elif line.split()[0] == 'Leaf':
>            fields[field] = line.split()[-1]
>        else:
>            line = f.next()
>    
>    and get,
>    
>    Traceback (most recent call last):
>      File "<pyshell#1>", line 1, in <module>
>        line.split()[0]
>    IndexError: list index out of range

Bryan,

There are some blank lines in your file.  When those lines are
reached, line.split() returns an empty list, and therefore
line.split()[0] is an IndexError.   One way to rewrite this is as
follows (untested):

    for line in f:
        pieces = line.split()
        if pieces:                      # non-empty line
            if pieces[0] == 'Field':
                field = int(pieces[-1])
            elif pieces[0] == 'Leaf':
                fields[field] = pieces[-1]
            else:
                line = f.next()         # I've left this here, but not sure
                                        # why you have it.  The for loop
                                        # already advances from line to line

Note as well that it is better to perform the split once per line
(rather than recomputing it as you do in your original code).

With regard,
Michael



More information about the Tutor mailing list