2016-03-18 5 views
-1

Я прочитал некоторую информацию о разборе файлов в Python, но для меня сейчас не совсем ясно, поэтому мне нужна помощь.Анализ файлов в Python

У меня есть файл журнала со строками, который имеет определенные маркеры как WARNING, DEBUG и т. Д. И я хочу поместить все их в разные списки, чтобы работать с ними позже. Так как я понимаю, мне нужно использовать regexp для этого. Код, который у меня есть прямо сейчас.

Часть кода, который поможет вам понять, где и что я хочу поставить:

message = ('CRITICAL', 'ERROR', 'WARNING', 'INFO', 'DEBUG', 'AUDIT', 'TRACE') 
crit, err, warn, info, deb, aud, tra = [], [], [], [], [], [], [] 
error = (crit, err, warn, info, deb, aud, tra) 

Вот анализатор кода:

with open(log, 'r+') as f: 
    lines = f.readlines() 

    for line in lines: 
     for i in range(len(message)): 
      match = re.search(message[i], line) 
      if match: 
       new_line = match.group() 
       error[i].append(new_line) 

Так линия «для линии в линии» само по себе захватывает отлично, но когда я забираю «для i в диапазоне (len (message)):« и попробуйте распечатать совпадение - он дает мне объект, а new_line добавляет только слово «WARNING» и т. д. Так что не вся строка, но мне это нужно без каких-либо разрезов.

Заранее благодарен!

+1

Если вам нужна целая строка, почему бы вам не использовать 'new_line = line' вместо' match.group() '? –

+0

Да, я понял. Мне нужно изменить поведение на этот: для строк в строках: для i в диапазоне (len (сообщение)): if re.search (message [i], line): error [i] .append (line) – Valentyn

+0

Если вы просто хотите проверить, можно ли найти 'message [i]' из 'line', это может быть сделано с помощью' if message [i] в ​​строке: 'без использования regex – niemmi

ответ

0

Если вы хотите линию, добавьте строку: error[i].append(line), а не match.group().

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