2011-07-25 265 views
0

我有一个问题,我需要问你。这里是我的脚本的一部分:Python:嵌套循环

scan=file('indice.txt','r') 
for i_L in range(10): 
    for line in scan: 
     a,b,c=line.split() 
     do something ... 
     ... ... 
    print something 
scan.close() 

indice.txt是包含实数的3列的文件。

主要问题是,当i_L的外循环执行i_L的第一个值时,循环被打破,输出中只显示一个值。

任何人都可以提供帮助吗?

+1

这是什么?蟒蛇?如果是的话,使用可用的标签。 –

+1

你应该使用你正在使用的任何语言来标记它。 – Randy

+0

请认真了解我们更多的代码 - 您给我们的东西不足以让我们弄清楚发生了什么。 EG你有代码中的某处有“继续”还是“休息”? 你打印出来的是什么?您的文件中有三列*列,但有多少行? –

回答

3

你重新开始遍历文件中的行之前,你应该寻求该文件的开头:

scan=file('indice.txt','r') 
for i_L in range(10): 
    for line in scan: 
     a,b,c=line.split() 
     do something ... 



     ... 
    print something 
    scan.seek(0) 
scan.close() 

file.seek

您还应该考虑先缓存行,然后再处理缓存。

1

您还可以阅读所有线路在一旦进入列表,并继续使用它(假设这indice.txt不像500GB数据)

scan=file('indice.txt','r') 
lst_scan = list(scan) 
scan.close() 
for i_L in range(10): 
    for line in lst_scan: 
     a,b,c=line.split() 
     do something ... 



     ... 
    print something 
0
for line in file: 
    ... 

for line in iter(file.readline, ""): 
    ... 
速记

所以你可以看到它实际上是调用readline来移动文件的当前位置,就像其他 文件操作一样。它不会回到文件的开头当您再次重复,除非你手动设置当前位置,如:

yourfile.seek(0) 

此外,如果你不想从最后一个位置而不是从寻求开始的时候,2“的for..in ..”是不是一个好办法要么,因为它可能有它的缓冲区,这个正确的方法是:

it = iter(file) 
    for line in it: 
     if line == "\n": 
      break 
    for line in it: 
     print line, 

请参见PEP234以了解更多内容: http://www.python.org/dev/peps/pep-0234/ 它解释了不同种类的迭代器如何工作。当迭代一个文件时会发生什么。