pal201
Янв. 5, 2010 14:45:40
Уважаемые господа, нужна помощь!
Есть лог вида:
Event: Newstate
Privilege: call,all
Channel: SIP
ChannelState: 5
ChannelStateDesc: Ringing
CallerIDNum: 300
CallerIDName:
Uniqueid: 1262695134.16
Значение и длина сообщений различна. Формат всегда поле и его значение через двоеточие.
Задача по любому из полуй значение записывать в переменную. Не знаю как распарсить, например нахожу вхождение Event в тексте, а как извлеч значение что-то не понимаю. Помогите пожалуйста.
Спасибо.
Ferroman
Янв. 5, 2010 15:05:58
Regular Expressions
expee
Янв. 5, 2010 15:08:29
Можно просто сделать сплит по строкам, а затем строку по двоеточию.
pal201
Янв. 5, 2010 15:14:37
Сейчас я ищу вхождение ключа в логе, но этот рог различной длины, нужно выбирать значение конкретного ключа
expee
Янв. 5, 2010 15:34:05
А в чем тогда проблема? Если тебе нужен словарь всех ключей и значений, то можно через сплит. Если нужно только одно значение, то через регексы будет быстрее:
print re.findall('%s: (.*?)\n' % key, i)
где i - лог, key - имя ключа.
pal201
Янв. 5, 2010 15:34:09
сделал так:
for s in result.split('\r'):
line=s.strip()
print line.split(':')
результат такой:
получились кортежи? как теперь извлечь значение
expee
Янв. 5, 2010 15:36:48
pal201
сделал так:
for s in result.split('\r'):
line=s.strip()
print line.split(':')
результат такой:
получились кортежи? как теперь извлечь значение
Получились списки. А значения у тебя в них хранятся с индексом 1.
pal201
Янв. 5, 2010 15:50:41
Да да, так и попробовал. Только вот проблема есть списки, в которых нет элементов:
for s in result.split('\r'):
line=s.strip()
n=line.split(':')
if ‘' in n:
n.remove(’')
print n
Соответственно надо удалять пустые
pal201
Янв. 5, 2010 15:57:47
Теперь сделал так:
for s in result.split('\r'):
line=s.strip()
n=line.split(':')
if '' in n:
del n
else:
print n
Вроде как все работает, только вот обратная сторона: теперь ужаляются не только рустые списки, но и там где есть 1 значение, а второго нет
Alex2ndr
Янв. 5, 2010 17:16:19
Что-то вы как-то странно все делаете.
Если пустые списки получаются из пустых строк, то при разборе файла можно просто не обрабатывать эти строки -
где line - переменная, в которую вы получаете строку