Скрипт пропускает второй цикл при чтении файла

Я пытаюсь прочитать файл журнала и сравнить определенные значения с установленными порогами. Моему коду удается записать исходные данные из первого цикла for в мою функцию.

Я добавил операторы печати, чтобы попытаться выяснить, что происходит, и мне удалось сделать вывод, что мой второй цикл никогда не «случается».

Это мой код:

 def smartTest(log, passed_file): # Threshold values based on averages, subject to change if need be RRER = 5 SER = 5 OU = 5 UDMA = 5 MZER = 5 datafile = passed_file # Log the raw data log.write('=== LOGGING RAW DATA FROM SMART TEST===\r\n') for line in datafile: log.write(line) log.write('=== END OF RAW DATA===\r\n') print 'Checking SMART parameters...', log.write('=== VERIFYING SMART PARAMETERS ===\r\n') for line in datafile: if 'Raw_Read_Error_Rate' in line: line = line.split() if int(line[9]) < RRER and datafile == 'diskOne.txt': log.write("Raw_Read_Error_Rate SMART parameter is: %s. Value under threshold. DISK ONE OK!\r\n" %int(line[9])) elif int(line[9]) < RRER and datafile == 'diskTwo.txt': log.write("Raw_Read_Error_Rate SMART parameter is: %s. Value under threshold. DISK TWO OK!\r\n" %int(line[9])) else: print 'FAILED' log.write("WARNING: Raw_Read_Error_Rate SMART parameter is: %s. Value over threshold!\r\n" %int(line[9])) rcode = mbox(u'Attention!', u'One or more hardrives may need replacement.', 0x30) 

Вот как я называю эту функцию:

 dataOne = diskOne() smartTest(log, dataOne) print 'Disk One Done' 

diskOne() выглядит так:

 def diskOne(): if os.path.exists(r"C:\Dejero\HDD Guardian 0.6.1\Smartctl"): os.chdir(r"C:\Dejero\HDD Guardian 0.6.1\Smartctl") os.system("Smartctl -a /dev/csmi0,0 > C:\Dejero\Installation-Scripts\diskOne.txt") # Store file in variable os.chdir(r"C:\Dejero\Installation-Scripts") datafile = open('diskOne.txt', 'rb') return datafile else: log.write('Smart utility not found.\r\n') 

Я пробовал аналогичные проблемы с Google, и я их не нашел. Я попытался переместить мой первый цикл for в diskOne() но та же проблема возникает. Синтаксической ошибки нет, и я просто не могу увидеть проблему на этом этапе.

One Solution collect form web for “Скрипт пропускает второй цикл при чтении файла”

Он не пропускает ваш второй цикл. Вам нужно seek позицию назад. Это связано с тем, что после прочтения файла смещение файла будет помещено в конец файла, поэтому вам нужно будет вернуть его в начале. Это можно сделать легко, добавив строку

 datafile.seek(0); 

Перед вторым циклом.

Ссылка: Документация

  • Python пишет в файл, возвращает пустой файл
  • Как выполнить арифметическую операцию в дате в Python?
  • Python, читать текстовый файл CRLF как есть, с CRLF
  • Швейцарский турнир - алгоритм сопряжения
  • Многопоточность в Tkinter GUI, потоки в разных классах
  • переписать ElementTree код в lxml
  • Spyder 'runfile' не определен
  • Как получить всю комбинацию n двоичного значения?
  • Python - лучший язык программирования в мире.