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

Я пытаюсь прочитать файл журнала и сравнить определенные значения с установленными порогами. Моему коду удается записать исходные данные из первого цикла 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); 

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

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

  • Извлечение названий страниц и вкладчиков из MediaWiki XML
  • Хороший пример реализации многопроцессорности?
  • Как объединить многие объекты в один объект с использованием наследования в python? (во время выполнения)
  • Функция heapq.merge () для списка отсортированных файлов
  • Проверьте, является ли объект числом или логическим
  • Ошибка памяти с большими наборами данных для pandas.concat и numpy.append
  • Ширины столбцов (из нескольких столбцов) в Openpyxl становятся равными нулю после 60 + столбцов
  • Запустить процесс на другом рабочем столе, Python, Windows
  •  
    Interesting Posts for Van-Lav

    Почему я получаю сообщение «Слишком много индексированных свойств для сущности» только для 18 элементов в списке? (Python)

    выбор второго ребенка в красивом супе с супом.выбрать?

    Как изменить цвет фона ячейки excel с помощью библиотеки python xlwt?

    Как установить numpy 1.8 dev на Windows?

    Ошибка Python: неконтролируемый тип: 'list'

    Запись в Python с помощью rsyslog

    Python: конвертируйте случай с верблюдом в пространство, ограниченное с помощью RegEx, и принимая во внимание Акронимы

    python – Есть ли способ сохранить функцию в списке или словаре, чтобы при вызове индекса (или ключа) он запускал сохраненную функцию?

    MousePressEvent, смещение позиции в QGraphicsView

    Python – запуск интерактивного отладчика, когда исключение будет иначе брошено

    Как периодически запускать функцию в python

    Переименование имен столбцов в функции Pandas Groupby

    Как перенаправить stdout в файл при использовании subprocess.call в python?

    Что означает начало `\ x` в строке Python` \ xaa`

    jinja2: Как заставить его терпеть неудачу. Как djangotemplate

    Python - лучший язык программирования в мире.