2014-09-25 1 views
-1

Я пытаюсь запустить скрипт python в нескольких файлах и прочитать вывод для. В настоящее время он проверяет только если файл существует по:найти, если запуск заканчивается правильно в python

if file == "output": 

Но этот выход dosn't подтвердить, если пробег закончен правильно. Когда запуск закончен правильно, строка последнего файла имеет следующий вид: «Этот пробег завершен в«

Как я могу прочитать этот файл с последней строкой? С моим текущим знанием в питона (начинающий), мне удалось сделать:

#!/usr/bin/python3 
import os 
input = "FeMnPSi_EOS_10." 
for subdirs, dirs, files in os.walk(input): 
    for file in files: 
     if file == "out-Dy-eos2": 
      print("file found") 
      ifile=input+"/"+file 
      with open(ifile, "r") as if1: 
       for line in if1: 
        if "This run finished at" in line: 
         print("Ends Properly") 

Проблема с этим кодом является:

  • Он не знает, если «Этот пробег закончил на» строка - это предпоследняя строка файла.
  • Я не уверен, но думаю, здесь python должен читать файл последовательно .... для этого 10000+ строк для каждого файла.

Итак, могу ли я лучше проверить, существует ли линия, и между двумя последними линиями, не читая весь файл?

+1

здесь [как читать последние несколько строк из файла] (http://stackoverflow.com/a/260433/4279). Хотя 10K + мало, поэтому вы можете просто 'if1.readlines() [- 2:]', чтобы получить последние 2 строки. – jfs

+0

@ J.F.Sebastian OP не сказал, как долго длились его линии, и он просит эффективный метод. – simonzack

+0

@simonzack: И? вы заметили ссылку в моем предыдущем комментарии? – jfs

ответ

-1

Бит, который вам не хватает, это if1.readlines(), который читает весь файл в виде списка строк. Затем вы можете получить доступ к элементу last-but-one, используя нотацию среза.

with open(ifile, 'rb') as if1: 
    if "This run finished at" in if1.readlines()[-2] 
     print("Ends Properly") 
+0

-1 для ответа на дубликат. – simonzack

+0

OP не запрашивает последние n строк, только предпоследнюю строку. –

Смежные вопросы