2015-03-19 2 views
-2

У меня есть файл журнала на одном из серверов, и мне нужно написать скрипт python для копирования строк, содержащих теги ERROR и INFO. Я хочу, чтобы все строки с тегами записывались в новый файл каждый раз, когда я запускаю скрипт.Ошибка регистрации в файле

Вот что я написал до сих пор (я новичок)

my_errors=open("/var/tmp/myerrors1.txt", "w") 
my_trace=open("/var/tmp/logs/trace1.txt", "r") 
my_trace.readline() 

x = [INFO, WARN, ERRor] 

for line in my_trace: 
    for x in line: 
     my_errors.writelines(x) 

my_errors.close() 
my_trace.close() 

trace1.txt пример:

03/17/2015 13:41:55|WARN||ajp-bio-127.0.0.1-4090-exec-5|495233559||_ERR: execute(): Error Response returned 
03/17/2015 13:41:47|INFO||ajp-bio-127.0.0.1-4090-exec-2|495785359||_IN:SearchQuery getList(): |||| 
+1

Что вы хотите сказать? – myaut

ответ

0

Попробуйте это:

my_errors = open("/var/tmp/myerrors1.txt", "w") 
my_trace = open("/var/tmp/logs/trace1.txt", "r") 

levels = ['INFO', 'WARN', 'ERROR'] 

for line in my_trace: 
    if any(level in line for level in levels): 
     my_errors.write(line) 

my_errors.close() 
my_trace.close() 

Испытано с помощью после trace1.txt файл:

03/17/2015 13:41:55|WARN||ajp-bio-127.0.0.1-4090-exec-5|495233559||_ERR: execute(): Error Response returned 
Do not copy this line 
03/17/2015 13:41:47|INFO||ajp-bio-127.0.0.1-4090-exec-2|495785359||_IN:SearchQuery getList(): |||| 
Do not copy this line 

Результат myerrors1.txt файла:

03/17/2015 13:41:55|WARN||ajp-bio-127.0.0.1-4090-exec-5|495233559||_ERR: execute(): Error Response returned 
03/17/2015 13:41:47|INFO||ajp-bio-127.0.0.1-4090-exec-2|495785359||_IN:SearchQuery getList(): |||| 

Edit 2:

my_errors = open("/var/tmp/myerrors1.txt", "w") 
my_trace = open("/var/tmp/logs/trace1.txt", "r") 

levels = ['INFO', 'WARN', 'ERROR'] 

for line in my_trace: 
    for level in levels: 
     if level in line: 
      my_errors.write(line)  

my_errors.close() 
my_trace.close() 
+0

Спасибо за ваш ответ. Я попробую ваше решение и будет обновляться. –

+0

Я пробовал вышеуказанное решение, но проблема, которую я вижу, заключается в том, что весь файл trace1.txt копируется в файл myerrors1.txt вместо копирования строк, содержащих элементы из списка уровней. –

+0

Можете ли вы предоставить фрагмент файла 'trace1.txt'? – ILostMySpoon

0

Вы не задали вопрос, но я думаю, что ваша проблема в том, что ничего не пишет в файл. Вы переназначаете x чему-то еще (значения в line). Вам нужно присвоить ему другой переменной, например, так:

my_errors=open("/var/tmp/myerrors1.txt", "w") 
my_trace=open("/var/tmp/logs/trace1.txt", "r") 
my_trace.readline() 

x = [INFO, WARN, ERRor] 

for line in my_trace: 
    for message in line: # change from reassigning the x variable to something else 
     for error in x: # iterating through the errors in x 
      if error in my_trace: # checking if an error is in my_trace 
       my_errors.writelines(error) # writing the error 

my_errors.close() 
my_trace.close() 

Конечно, без полной информации, это не самый лучший ответ, но это должно быть что-то вы можете опираться, чтобы исправить свой код.

+0

Спасибо! за ваш ответ. Извините, мой вопрос был не ясен. Я хотел скопировать строки из файла трассировки в другую, если строка содержала любой из вышеупомянутых уровней журнала (информация, предупреждение или ошибка). –

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