Python:带有“打开”的无限循环

时间:2016-04-04 03:13:18

标签: python infinite-loop

我有一个大约5 GB(约有720万棵树)的巨大文件,其中包含粒子ID(第一列)和时间(第二列),如下所示,它告诉我们粒子的ID是如何演变的

#Tree 0, Nbranches=2
1544212658   -1.0000
#Tree 1, Nbranches=2
2147749983   -1.0000
#Tree 2, Nbranches=7
1644822649   -1.0000
1611272315   17.6766
1594523770   10.2310
1661603959   10.0127
1661624438   10.7100
#Tree 3, Nbranches=8
252530795   -1.0000
319647854   10.7497
...

我有一个ID列表作为列表的形式,我希望跟踪上述文件。我写了一个代码,它适用于我制作的一个小数据集,但每次我使用实际数据集(在我的大学集群上)运行它时,代码都会循环。我包含了一个print语句来跟踪代码的进度,我可以注意到,当它遇到大约第720万棵树时,它会再次从Tree 0开始。令我感到困惑的是,我根本不明白为什么代码循环,任何人都可以看到代码中的任何逻辑falacies?谁能帮我这个?感谢

代码:

import numpy as np
pid=[]
pid_pass=[]   
ids=np.loadtxt('C:\\Users\\Nin\\Downloads\\gg\\100kpc_cumulative_halo_ids.txt') #list of initial 
halos as a list                                                           
id_final=[]
with open('C:\\Users\\Nin\\Downloads\\Sel_merg_hist.txt','r') as inf:
      for line in inf:
         if line.startswith("#"):
             print line 
             del pid[:]

         else :
            parts = line.split() # split line into parts
            pid.append((int(parts[0]),float(parts[1])))
            for i in range(len(ids)):
                 if ids[i]==int(parts[0]) and float(parts[1]) == -1 :
                    id_final.append(int(parts[0]))
                    pid_pass.append(ids[i])

                 elif ids[i]==int(parts[0]) :
                    id_final.append(pid[0][0])
                    pid_pass.append(ids[i])



id_left=list(set(ids).difference(set(pid_pass)))  #list of ids not used,                                                                                                                                           which didn't merge until after z=10      

id_left= map(int,id_left) #convert float to int to get rid of .0

id_final=id_final+id_left                                        


file = open("100kpc_final_ids.txt", "w")
for index in range(len(id_final)):
        file.write(str(id_final[index]) +  "\n")
file.close()    

感谢@szym,似乎主循环读取文件的每一行都没有退出,它继续循环。知道为什么会这样吗?

0 个答案:

没有答案