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