Найти - Пользователи
Полная версия: Парсинг лога Нужна помощь
Начало » Python для новичков » Парсинг лога Нужна помощь
1 2
pal201
Уважаемые господа, нужна помощь!
Есть лог вида:
Event: Newstate
Privilege: call,all
Channel: SIP
ChannelState: 5
ChannelStateDesc: Ringing
CallerIDNum: 300
CallerIDName:
Uniqueid: 1262695134.16

Значение и длина сообщений различна. Формат всегда поле и его значение через двоеточие.
Задача по любому из полуй значение записывать в переменную. Не знаю как распарсить, например нахожу вхождение Event в тексте, а как извлеч значение что-то не понимаю. Помогите пожалуйста.
Спасибо.
Ferroman
Regular Expressions
expee
Можно просто сделать сплит по строкам, а затем строку по двоеточию.
pal201
Сейчас я ищу вхождение ключа в логе, но этот рог различной длины, нужно выбирать значение конкретного ключа
expee
А в чем тогда проблема? Если тебе нужен словарь всех ключей и значений, то можно через сплит. Если нужно только одно значение, то через регексы будет быстрее:

print re.findall('%s: (.*?)\n' % key, i)
где i - лог, key - имя ключа.
pal201
сделал так:
for s in result.split('\r'):
line=s.strip()
print line.split(':')

результат такой:








получились кортежи? как теперь извлечь значение
expee
pal201
сделал так:
for s in result.split('\r'):
line=s.strip()
print line.split(':')

результат такой:








получились кортежи? как теперь извлечь значение
Получились списки. А значения у тебя в них хранятся с индексом 1.
pal201
Да да, так и попробовал. Только вот проблема есть списки, в которых нет элементов:
for s in result.split('\r'):
line=s.strip()
n=line.split(':')
if ‘' in n:
n.remove(’')
print n












Соответственно надо удалять пустые
pal201
Теперь сделал так:
for s in result.split('\r'):
line=s.strip()
n=line.split(':')
if '' in n:
del n
else:
print n

Вроде как все работает, только вот обратная сторона: теперь ужаляются не только рустые списки, но и там где есть 1 значение, а второго нет
Alex2ndr
Что-то вы как-то странно все делаете.
Если пустые списки получаются из пустых строк, то при разборе файла можно просто не обрабатывать эти строки -
if not line: continue
где line - переменная, в которую вы получаете строку
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB