2015-06-25 126 views
0
#if(len(results) != 0) 

fr = (open("new_file.txt","r")) 

fr1 = (open("results.txt","w")) 

    for j in range (len(line_list)): 

     for i, line in enumerate(fr): 
      if(i == line_list[j]):`find the line in the file` 
       fr1.write(FAILURE_STRING+line)`mark the failure` 
      else:`enter code here` 
       fr1.write(line) 
    fr.close() 
    fr1.close() 

在上面的例子MMY j循環執行一次。我試圖在結果文件中標記失敗。即使我的line_list幾乎有7個元素(行號我假設標記失敗的情況下不匹配),它只標記失敗1元素。如果我在內部使用J for循環,則會標記所有失敗,結果文件中將出現重複項(每行的重複項數與line_list中的元素數相同)Python的嵌套循環執行一次用於文件迭代

+0

請修正代碼的縮進。 – Vicyorus

回答

0

open返回a generator,你只能迭代一次發生器。

你有兩個選擇:

  1. 反轉for循環,所以你只能在文件重複一次。

    for i, line in enumerate(fr): 
        for j in range (len(line_list)): 
         if(i == line_list[j]): #find the line in the file 
          fr1.write(FAILURE_STRING+line)#mark the failure` 
         else: 
          fr1.write(line) 
    
  2. 投你的文件的類型。如果我理解正確的話,您有不與那些匹配上的文件行的列表(這不是一個發電機

    fr = [i for i in fr] 
    
0

new_file.txt),並且您想要爲這些行引入錯誤字符串。對於這一點,你必須在循環,這會導致這樣的事情

line_list = [0, 2, 2, 4] # Example list of lines 
FAILURE_STRING = "NO" 
fr = open("new_file.txt", "r") 

fr1 = open("results.txt", "w") 

for i, line in enumerate(fr.readlines()): 
    if(i == line_list[i]): 
     fr1.write(FAILURE_STRING+line) 
    else: 
     fr1.write(line) 

fr.close() 
fr1.close() 
0

感謝您對所有的答案使用fr.readlines()。 @NightShadeQueen你的回答中的2點幫助我達成了目標。 以下是其工作的解決方案:

if(len(results) != 0): 

    fr1 = (open("results.txt","w")) 
    fr = (open("new_file.txt","r")) 
    fr = [i for i in fr] 
    for i in range (len(fr)): 
     if i in line_list: 
      fr1.write(FAILURE_STRING+fr[i]) 
     else:`enter code here` 
      fr1.write(fr[i])    
fr1.close()