Hs Hs wrote:
hi I have a file and it is in chunks:
I want to be able to select the number that follows 'Elution: ' where the line startswith (TITLE)(say
72.958) and check if it is larger than my choice of number (say
71.4). If it is then I want to print chunk from BEGIN LINE to END
LINE separated by one empty line.

I wrote the following script, when executed in IDEL or python mode,

What is "python mode"? Do you mean the interactive interpreter?


it works. however I use python test_script_test.py , I get name error:

could you please help me whats wrong here.


$ python test_script_test.py
Traceback (most recent call last):
  File "test_script_test.py", line 14, in <module>
    newk = dat[mystartl:myfinish]
NameError: name 'myfinish' is not defined


In python mode:
f1 = open('test','r')
da = f1.read().split('\n')
dat = da[:-1]
mytimep = 71.4
for i in range(len(dat)):
...         if dat[i].startswith('BEGIN LINE'):
...                 mystartl = i
...         if dat[i].startswith('END LINE'):
...                 myfinish = i
...         if dat[i].startswith('Title'):
...                 col = dat[i].split(',')
...                 x= float(col[2].split()[1])
...                 if x > mytimep:
...                         newk = dat[mystartl:myfinish]
...                         for x in newk:
...                                 print x

This can fail because myfinish doesn't get defined until you see a line "END LINE". So if you have a file like this:

BEGIN LINE   <= defines "mystart"
Title ...    <= tries to use "mystart" and "myfinish"
END LINE     <= defines "myfinish"

the call to dat[mystartl:myfinish] fails because there is no myfinish.

The reason it works in IDLE and the Python interactive interpreter is that you must have already defined a myfinish variable previously.

Your code does way too much work manually instead of letting Python handle it. If you want to read lines from a file, just read them from a file. This should be close to what you want:

f1 = open('test','r')
mytimep = 71.4
flag = False
collected = [] # Hold collected lines as you see them.
for line in f1:
    line = line.rstrip()  # strip whitespace from the end of the line
    if line == "BEGIN LINE":
        flag = True  # start processing
        continue  # but not *this* line, start at the next line
    if line == "END LINE":
        flag == False
    if flag:
        # process the line
        if line.startswith('Title'):
            col = line.split(',')
            x = float(col[2].split()[1])
            if x > mytimep:
                collected.append(line)

for line in collected:
    print line


--
Steven

_______________________________________________
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
http://mail.python.org/mailman/listinfo/tutor

Reply via email to