[Tutor] manipulating data

Bryan Fodness bryan.fodness at gmail.com
Mon Nov 12 02:02:21 CET 2007


Using,

fields = {}
for line in open('data.txt') :
   if line :
       if line.split()[0] == 'field' :
           field = int(line.split()[-1])
       else :
           fields[field] = tuple(line.split())

I get,

fields[field] = tuple(line.split())
NameError: name 'field' is not defined




On Nov 8, 2007 7:34 AM, Ricardo Aráoz <ricaraoz at gmail.com> wrote:
>
> Kent Johnson wrote:
> > Bryan Fodness wrote:
> >> I would like to have my data in a format so that I can create a contour plot.
> >>
> >> My data is in a file with a format, where there may be multiple fields
> >>
> >> field = 1
> >>
> >> 1a   0
> >
> > If your data is really this regular, it is pretty easy to parse. A
> > useful technique is to access a file's next method directly. Something
> > like this (not tested!):
> >
> > f = open('data.txt')
> > fields = {} # build a dict of fields
> > try:
> >    while True:
> >      # Get the field line
> >      line = f.next()
> >      field = int(line.split()[-1]) # last part of the line as an int
> >
> >      f.next() # skip blank line
> >
> >      data = {} # for each field, map (row, col) to value
> >      for i in range(20): # read 20 data lines
> >        line = f.next()
> >        ix, value = f.split()
> >        row = int(ix[:-1])
> >        col = ix[-1]
> >        data[row, col] = int(value)
> >
> >      fields[field] = data
> >
> >      f.next()
> > except StopIteration:
> >    pass
> >
>
> Or maybe just (untested) :
>
> fields = {} # build a dict of fields
> for line in open('data.txt') :
>    if line :    # skip blank lines
>        if line.split()[0] == 'field' :
>            field = int(line.split()[-1])
>        else :
>            fields[field] = tuple(line.split())
>
> _______________________________________________
> Tutor maillist  -  Tutor at python.org
> http://mail.python.org/mailman/listinfo/tutor
>


More information about the Tutor mailing list