2016-06-30 124 views
0

我想讀一個文件時,得到開頭的行這將打破"--------------------------"爲:While循環中斷條件不工作

#!/usr/bin/python3 
def cinpt(): 
    with open("test", 'r') as finp: 
     for line in finp: 
      if line.strip().startswith("start"): 
       while not line.startswith("---------------"): 
        sdata = finp.readline() 
        print(sdata.strip()) 

cinpt() 

演示輸入文件(test)是:

foo 
barr 
hii 
start 
some 
unknown 
number 
of 
line 
----------------------------- 
some 
more 
scrap 

我期待在閱讀"line"之後破解代碼。預期的輸出是:

some 
unknown 
number 
of 
line 

需要start狀況正常,但在打破「----」,而不是去一個無限循環。我所得到的是:

some 
scrap 
line 
----------------------------- 
some 
more 
scrap 
+2

你的'while'循環在'for'循環中。每次運行for循環時while循環都會運行。 –

回答

2

它會永久循環,因爲您的行變量在while循環期間不會更改。你應該逐行迭代,它很簡單。

#!/usr/bin/python3 
def cinpt(): 
    with open("test", 'r') as finp: 
     started = False 
     for line in finp: 
      if started: 
       if line.startswith("---------------"): 
        break 
       else: 
        print(line.strip()) 
      elif line.strip().startswith("start"): 
       started = True 

cinpt() 
0

你應該閱讀留置權形成文件,在一個地方 正因爲如此,你都在for line in finp:線和sdata = finp.readline()取出由文件行 - 這可能將是壞爲你(如你所知)。

將你的場數據保存在一個地方,並使用熟悉的狀態變量來知道你應該如何處理這些數據。 #!的/ usr/bin中/ python3

def cinpt(): 
    with open("test", 'r') as finp: 
     inside_region_of_interest = False 
     for line in finp: 
      if line.strip().startswith("start"): 
       inside_region_of_interest = True 
      elif line.startswith("---------------"): 
       inside_region_of_interest = False 
      elif inside_region_of_interest: 
       sdata = line 
       print(sdata.strip()) 

cinpt() 

這就是說,你的具體問題是,即使你的while條件是在line變量,你永遠不修改 while循環中的變量。其內容保持固定爲"start\n"直到文件末尾。