[EMAIL PROTECTED] 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 > 2a 0
The above is NOT consistent with the later listing of your data file. [big snip > 10b 0 > > where the value is how far from the center it will be displaced, > > a b a > b a b > 10 0000000000|0000000000 0000000000|0000000000 0000000000| [big snip of seemingly irrelevant stuff] > 1 0000000000|0000000000 0000000000|0000000000 0000000000| > 0000000000 > > I could possibly have many of these that I will add together and > normalize to one. > > Also, there are 60 a and b blocks, the middle 40 are 0.5 times the > width of the outer 20. > > I thought about filling an array, but there is not a one to one > symmetry. > > I cannot seem to get my head around this. Can anybody help me get > started? > > I have tried to use a dictionary, but cannot seem to get it to work > the way I want. > > I try this, > > --------------------------------------------------------------------------------- > > f = open('TEST1.MLC') > > fields = {} > > for line in f: > if line.split()[0] == 'Field': > > field = int(line.split()[-1]) Do line.split() ONCE per line. > > elif line.split()[0] == 'Leaf': > fields[field] = line.split()[-1] > else: > line = f.next() Don't mix for line in f and line = f.next() otherwise you will you will skip lines that you don't want to skip and/ or become confused. > > --------------------------------------------------------------------------------- > > and get, > > --------------------------------------------------------------------------------- > > Traceback (most recent call last): > File "<pyshell#1>", line 1, in <module> > line.split()[0] > IndexError: list index out of range This indicates that you have a list for which 0 is not a valid index. If it had 1 or more elements, then 0 would be a valid index. I conclude that the list is empty. This would happen if line contained no characters other than whitespace. > Here is my data file, > > --------------------------------------------------------------------------------- > > File Rev = G > Treatment = Dynamic Dose > Last Name = Fodness > First Name = Bryan > Patient ID = 0001 > Number of Fields = 4 > Number of Leaves = 120 > Tolerance = 0.50 > > Field = 10 > Index = 0.0000 > Carriage Group = 1 > Operator = > Collimator = 0.0 > Leaf 1A = 0.00 > Leaf 2A = 0.00 [snip] > Leaf 20A = 0.00 > Leaf 21A = 5.00 > Leaf 22A = 5.00 [snip] > Leaf 40A = 5.00 [big snip -- your code failed no later than the 10th line in the data file] To find out what is going on, print out some variables: 8<--- fodness.py ---- f = open('fodness.dat') fields = {} for lino, line in enumerate(f): tokens = line.split() print "Line %d: tokens = %r" % (lino, tokens) if not tokens: continue # blank/empty line tok0 = tokens[0] if tok0 == 'Field': field = int(tokens[-1]) elif tok0 == 'Leaf': fields[field] = tokens[-1] else: continue print " Fields:", fields 8<--- Results [truncated]: C:\junk>fodness.py | more Line 0: tokens = [] Line 1: tokens = ['File', 'Rev', '=', 'G'] [snip] Line 8: tokens = ['Tolerance', '=', '0.50'] Line 9: tokens = [] Line 10: tokens = ['Field', '=', '10'] Fields: {} Line 11: tokens = ['Index', '=', '0.0000'] Line 12: tokens = ['Carriage', 'Group', '=', '1'] Line 13: tokens = ['Operator', '='] Line 14: tokens = ['Collimator', '=', '0.0'] Line 15: tokens = ['Leaf', '1A', '=', '0.00'] Fields: {10: '0.00'} <<<<<<<<<<====== Don't you need a float instead of a string?? Line 16: tokens = ['Leaf', '2A', '=', '0.00'] Fields: {10: '0.00'} Line 17: tokens = ['Leaf', '3A', '=', '0.00'] Fields: {10: '0.00'} Line 18: tokens = ['Leaf', '4A', '=', '0.00'] Fields: {10: '0.00'} Don't you want/need to use the leaf IDs (1A, 2A, etc)?? I guess that you want to end up with NESTED dictonaries, like this: fields = { 10: { '1A': 0.0, '2A': 0.0, etc, }, 8: { etc, }, etc, } HTH, John -- http://mail.python.org/mailman/listinfo/python-list