Форум сайта python.su
Уважаемые господа, нужна помощь!
Есть лог вида:
Event: Newstate
Privilege: call,all
Channel: SIP
ChannelState: 5
ChannelStateDesc: Ringing
CallerIDNum: 300
CallerIDName:
Uniqueid: 1262695134.16
Значение и длина сообщений различна. Формат всегда поле и его значение через двоеточие.
Задача по любому из полуй значение записывать в переменную. Не знаю как распарсить, например нахожу вхождение Event в тексте, а как извлеч значение что-то не понимаю. Помогите пожалуйста.
Спасибо.
Офлайн
Regular Expressions
Офлайн
Можно просто сделать сплит по строкам, а затем строку по двоеточию.
Отредактировано (Янв. 5, 2010 15:08:43)
Офлайн
Сейчас я ищу вхождение ключа в логе, но этот рог различной длины, нужно выбирать значение конкретного ключа
Офлайн
А в чем тогда проблема? Если тебе нужен словарь всех ключей и значений, то можно через сплит. Если нужно только одно значение, то через регексы будет быстрее:
print re.findall('%s: (.*?)\n' % key, i)
Офлайн
сделал так:
for s in result.split('\r'):
line=s.strip()
print line.split(':')
результат такой:
получились кортежи? как теперь извлечь значение
Офлайн
pal201Получились списки. А значения у тебя в них хранятся с индексом 1.
сделал так:
for s in result.split('\r'):
line=s.strip()
print line.split(':')
результат такой:
получились кортежи? как теперь извлечь значение
Отредактировано (Янв. 5, 2010 15:37:03)
Офлайн
Да да, так и попробовал. Только вот проблема есть списки, в которых нет элементов:
for s in result.split('\r'):
line=s.strip()
n=line.split(':')
if ‘' in n:
n.remove(’')
print n
Соответственно надо удалять пустые
Офлайн
Теперь сделал так:
for s in result.split('\r'):
line=s.strip()
n=line.split(':')
if '' in n:
del n
else:
print n
Вроде как все работает, только вот обратная сторона: теперь ужаляются не только рустые списки, но и там где есть 1 значение, а второго нет
Офлайн
Что-то вы как-то странно все делаете.
Если пустые списки получаются из пустых строк, то при разборе файла можно просто не обрабатывать эти строки -
if not line: continue
Отредактировано (Янв. 5, 2010 17:18:48)
Офлайн