Эта функция принимает тело сообщения электронной почты в качестве входных данных и возвращает значения после имени приложения, источника и сообщения соответственно, и работает нормально
def parse_subject(line):
info = {}
segments = line.split(' ')
info['time'] = segments[0]+' '+segments[1]
for i in range(2, len(segments)):
key = ''
if segments[i] == 'Application name:':
key = 'appname'
elif segments[i] == 'Source:':
key = 'source'
elif segments[i] == 'Message:':
key = 'message'
if key != '':
i += 1
info[key] = segments[i]
return info
Для другого формата тела письма мне нужно расширить формат сегментов, потому что мне нужно искать больше строк в теле сообщения, поэтому я изменил информацию ['time'] и, как только я расширяю сегменты более чем на 2, я выхожу из диапазона ошибки
info['time'] = segments[0]+' '+segments[1]+' '+segments[2]+' '+segments[3]+' '+segments[4]+' '+segments[5]......up to segment[17]
может быть, мне нужно будет расширить
и выше функция завершается с list index out of range
Я изменил код, но та же ошибка:
также попытался изменить число в соответствии с количеством сегментов, но то же самое:
for i in range(<number of segments>, len(segments)):
пример сегментов: длина будет меняться, потому что строка после сообщения имеет другое значение, иногда это строка URL
Вопрос
когда я определяю длину сегмента, скажем, до сегментов [17],
что мне нужно изменить в функции, чтобы не выбрасывать out of index error
def parse_subject(line):
info = {}
segments = line.split(' ')
info['time'] = segments[0]+' '+segments[1] + ' ' + segments[2] + ' ' + segments[3] + ' ' + segments[4] + ' ' + segments[5] + ' ' + segments[6] + ' ' + segments[7] + ' ' + segments[8] +' ' + segments[9] + ' ' + segments[10] + ' ' + segments[11] + ' ' + segments[12] +' ' + segments[13] + ' ' + segments[14] + ' '
+ segments[15] +' ' + segments[16] + ' ' + segments[17]
for i in range(16, len(segments)):
key = ''
if segments[i] == 'name:':
key = 'appname'
elif segments[i] == 'Source:':
key = 'source'
elif segments[i] == 'Message:':
key = 'message'
if key != '':
i += 1
info[key] = segments[i]
return info
if mail["Subject"].find("PA1") > 0 or mail["Subject"].find("PA2") > 0:
body = get_autosys_body(mail)
# print(body)
for line in body.splitlines():
if 'Application Name' in line:
job_info = parse_subject(line)
break
print(job_info)
Мне нужно передать строковую переменную (содержимое ниже)
name:Clarion.MarketSnapService
Source: p2prog15
Timestamp: 2019-01-22T00:00:43.901Z
Message:null
до parse_subject(line)
функция и сверху вывод, чтобы получить:
Clarion.MarketSnapService
как значение job_info['appname']
p2prog15
как значение jobinfo['source']
null
как значение jobinfo['message']