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 <[EMAIL PROTECTED]> 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@python.org > http://mail.python.org/mailman/listinfo/tutor > _______________________________________________ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor