2016-08-02 3 views
0

Я играл с Python, пытаясь написать скрипт для сканирования каталога для определенных файлов, поиска определенных ключевых слов и сохранения строк, в которых эти ключевые слова отображаются в новом файле. Я придумал это;Python text parsing and saving as html

import sys, os, glob 

for filename in glob.glob("./*.LOG"): 
with open(filename) as logFile: 
name = os.path.splitext(logFile.name)[0] 
newLOG = open(name + '_ERROR!'+'.LOG', "w") 
allLines = logFile.readlines() 
logFile.close() 
printList = [] 

for line in allLines: 
    if ('ERROR' in line) or ('error' in line): 
    printList.append(line) 

for item in printList: 
    # print item  
    newLOG.write(item) 

Это все хорошо, но я думал, что я хотел бы попробовать вместо экономии этот новый файл как HTML оборачивать все в тегах прав (HTML, голова, тело ...), так что, возможно, я мог бы изменить шрифт цвет ключевых слов. Пока это выглядит так;

import sys, os, glob 

for filename in glob.glob("./*.LOG"): 

with open (filename) as logFile: 
    name = os.path.splitext(logFile.name)[0] 
    newLOG = open(name + '_ERROR!'+'.html', "w") 
    newLOG.write('<html>') 
    newLOG.write('<head>') 
    newLOG.write('<body><p>') 

    allLines = logFile.readlines() 
    logFile.close() 
    printList = [] 

    for line in allLines: 
     if ('ERROR' in line) or ('error' in line): 
     printList.append(line) 

    for item in printList: 
     # print item 

     newLOG.write('</html>') 
     newLOG.write('</head>') 
     newLOG.write('</body><p>') 
     newLOG.write(item) 

Теперь проблема, я новичок в этом, и я все еще пытаюсь понять, как работать с углублениями и петли .. Потому что мои HTML-теги, добавленными внутри цикла, каждая строка имеет <html>, <head> & <body><p> бирка вокруг них, и это просто выглядит неправильно. Я понимаю проблему и пытаюсь переписать вещи так, что теги применяются вне цикла, но я не имел большого успеха.

Может ли кто-нибудь показать мне лучший способ получить имя файла текущего файла, создав новый файл + добавить его, поскольку я думаю, что именно поэтому я получаю ошибки обработки файлов при попытке изменить, как все это работает ,

Благодаря

ответ

1

Это вопрос отступов линий до нужного уровня. Нижний колонтитул HTML должен быть напечатан на уровне отступов строк заголовка, без отступов внутри цикла. Попробуйте это:

import sys, os, glob 
import cgi 

for filename in glob.glob("./*.LOG"): 

    name = os.path.splitext(filename)[0] 
    with open(filename, 'r') as logFile, open('%s_ERROR!.html' % name, 'w') as outfile: 
     outfile.write("<html>\n<head>\n</head>\n<body><p>") 

     allLines = logFile.readlines() 
     printList = [] 

     for line in allLines: 
      if ('ERROR' in line) or ('error' in line): 
       printList.append(line) 

     for item in printList: 
      # Note: HTML-escape value of item 
      outfile.write(cgi.escape(item) + '<br>') 

     outfile.write("</p></body>\n</html>") 

Обратите внимание, что вам не нужно использовать перечень печати - вы можете просто испускать HTML код, как вы идете через бревно.

Рассмотрите возможность разбиения на более мелкие функции для повторного использования и удобочитаемости.

+0

Привет, спасибо за помощь, к сожалению, я еще не совсем там. Я получил ошибку, связанную с EOL, которая была исправлена ​​путем исправления цитаты в последней строке, но теперь я получаю сообщение об ошибке в строке os.path, в которой лог-файл не определен (понятно), затем я попытался разделить строку 7 и поставить "с открытым (имя файла, 'r') как logFile" до "name + os.path ...", но это, в свою очередь, вызывает ошибку на оставшейся строке; "open (name + '_ERROR! .html', 'w') как outfile:" как недопустимый синтаксис =/ – Skyone

+0

Исправлена ​​ошибка (извините за это) - попробуйте обновленный ответ. – Owen

+0

Блестяще благодарю вас! Теперь мне просто нужно выяснить, как обернуть ключевые слова в правильные теги, чтобы их разный цвет. Боковой вопрос; Это что-то вроде этого; ключевое слово лучший способ пойти или мне пойти с css. Еще раз спасибо. – Skyone