2015-06-25 92 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()