Найти - Пользователи
Полная версия: Парсинг лога Нужна помощь
Начало » Python для новичков » Парсинг лога Нужна помощь
1 2
pasaranax
pal201
for s in result.split('\r'):
Зря по \r разрезаешь, это только на винде перенос строки делается \n\r, на нормальных осях уже избавились от пережитка печатных машинок вроде переноса каретки :) Сплитуй по \n. Итого:
for line in result.split('\n'):
if line:
name, val = line.split(':')
print name, val
expee
pasaranax, у него может и не быть значения, а только ключ (как в примере - CallerIDName). Так что лучше, например, через try/except.
pasaranax
expee
pasaranax, у него может и не быть значения, а только ключ (как в примере - CallerIDName). Так что лучше, например, через try/except.
Тогда val будет равно '', то есть пустой строке. А вот если в строке лога появится второе двоеточие, то вылезет исключение.
expee
pasaranax
Тогда val будет равно '', то есть пустой строке. А вот если в строке лога появится второе двоеточие, то вылезет исключение.
А ну да, просто не обратил внимания, что разбиваешь по ‘:’, а не по ‘: ’. В твоем случае придется еще резать пробелы в начале строки.
Alex2ndr
Я бы тоже помог еще чем-нить - если б понимал что и как. К сожалению много неясностей, например:
1.
for s in result.split('\r'):
что это за result? если это все содержимое файла, то почему не
for s in open('logfile.log'):
и памяти жрет меньше и не нужно думать о символе окончания строки.
2. Если это какой-то кусок файла, то каково остальное содержимое? оно повторяет эти же группы, но с другими параметрами? или там список иных параметров - уникальных?
3. Неясна конечная задача всего этого - в каком виде надо подавать значения? может надо брать только определённые значения? и тд
ZZZ
Гы-гы… Asterisk однако… 1.4, кажется… AMI. Через телнет общаешься? :-) Я буквально две недели назад разбирал это.
Есть такая штука: pyst. Очень удобно и просто.
Ещё есть варианты на Twisted, но у меня не было времени в него въезжать.

Ты лучше опиши, что тебе конкретно надо и если могу – помогу.

P.S.
pal201
result.split('\r')
Астер разделяет это дело через ‘\r\n’.
ZZZ
Я писал автодозвонщик и склепал вот такую функцию для получения сообщений от Астера:
def recive(telnet, timeout=None):
'''Recive data from server.'''
logger.debug('Reciving data...')

if timeout is None:
raw = telnet.read_until('\r\n\r\n')[:-2]
else:
raw = telnet.read_until('\r\n\r\n', timeout)[:-2]

if not raw:
raise EOFError
logger.debug('Recived raw data: %r', raw)

data = {}
for line in raw.strip().split('\r\n'):
key, value = [s.strip() for s in line.split(':', 1)]
data[key] = value
logger.debug('Recived data: %r', data)

return data
Я не стал заморачиваться с нормальной эвэнт-системой, потому что тут оно не требуется – просто одним потоком и посылаю команды (Login и Originate), и получаю респонзы и эвэнты. Оно очень даже удобно оказалось…
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