Wojtek Walczak wrote:
On Fri, 22 Aug 2008 10:42:13 -0400, Ben Keshet wrote:
Thanks. I tried to use 'for' instead of 'while' as both of you suggested. It's running well as my previous version but breaks completely instead of just skipping the empty file. I suspect the reason is that this part is inside another 'for' so it stops everything. I just want to it to break only one 'for', that is go back to 5th line in the example code (directory C has one empty file):

           for line in f:
                        ^^^
               line = line.rstrip()
               if "PRIMARY" not in line:
                   j += 1
                   if j == 20:
                       break
               else:
                   for line in f:
                                ^^^
You're iterating through the same value in inner and outer loop.
Don't do that. It's hard to predict the behavior of such a code.

Regarding break statement, it breaks only the inner loop
and returns to the outer loop/block.

It would be great if you could reduce your code to a short piece
that illustrates your problem and that we could all run.

I ended up using another method as someone suggested to me. I am still not sure why the previous version got stuck on empty files, while this one doesn't:

receptors = ['A' 'B']
for x in receptors:
# open out_file for appending for each 'x' in receptors, close at same level out_file = open('c:/Linux/Dock_method_validation/%s/validation/pockets.out' %(x),'a')
   for i in range(10):
       for r in (7, 9, 11, 13, 15, 17):
f = open('c:/Linux/Dock_method_validation/%s/validation/ligand_ran_line_%s_%sA_secondary_scored.mol2' %(x,i,r), 'r')
           # assume 'PRIMARY' should be found first
           # set flag for string 'PRIMARY'
           primary = False
           # iterate on file object, empty files will be skipped
           for line in f:
               if 'PRIMARY' in line:
                   primary = True
                   out_file.write(line.strip())
                   # copy scores
               elif 'TRIPOS' not in line and primary:
                   out_file.write(line.strip())
                   out_file.write(' ')
               elif 'TRIPOS' in line and primary:
                   break
           print
           out_file.write('\n')
           f.close()
   out_file.close()
--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to