2015-06-25 4 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 элементов (номера строк, я предполагаю, чтобы отметить отказ в случае несоответствия), он отмечает отказ только для одного элемента. Если я возьму цикл J внутри, он пометит все сбои, что в файле результатов будут дубликаты (количество дубликатов каждой строки будет таким же, как количество элементов в списке строк)Python Вложенный цикл Выполняется только один раз для итерации файла

+0

Исправьте код отступа. – Vicyorus

ответ

0

open возвращает a generator, и вы можете только перебирать генератор один раз.

У вас есть два варианта:

  1. передачи заднего хода для петель, так что вы итерацию только через файл один раз.

    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. Cast ваш файл типа это не генератор

    fr = [i for i in fr] 
    
0

Если я правильно понял, у вас есть список строк, которые не соответствуют с теми, на файл (new_file.txt), и вы хотите ввести строку ошибок в эти строки. Для этого, вы должны использовать fr.readlines() на цикле, что приводит к чему-то вроде этого

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

Спасибо за все ваши ответы. @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() 
Смежные вопросы