标题根本没有解释我的问题,但我会告诉你。 我正在使用Google API解析来自GMail帐户的电子邮件。从每封电子邮件中我需要获得一些价值。电子邮件正文形成如下:
对象:某事。
程序:某事。
...
(许多领域)
...
请求:(可以是单行或多行的值)
要获得我需要的所有字段,我这样做:
for msg in msg_list:
data_dict = OrderedDict()
msg = msg.replace('\r','')
msg = msg.split('\n')
for row in msg:
row = row.split(":")
if row[0] in key_list:
data_dict[row[0]] = row[1]
dict_list.append(data_dict)
return dict_list
当我解析特定字段'Request'时会出现问题,因为它可以是多行的并且使用'msg.split('\ n')'我得到这个:
“请求:(第一行字段)”, “(第二排场)”, ...
“(第n行字段)”
在Ordered Dict中只将第一行作为值。 我怎么能得到整个内容? 我希望它得到很好的解释。
这是msg (already splitted)
的形式msg_list
:
'',
'La pratica Ticketing TSX - 2016-049044 necessita di essere lavorata'。,
'',
'Procedura:MATRIX - 企业数据仓库',
'Oggetto:Mancata esecuzione algoritmo stima reddito(DASTIRED)',
'Perimetro:Specifico',
'优先级= C3 = A0 richiesta:Alta',
'Tipologia Richiesta:Segnalazione Anomalia',
'Sottotipologia Richiesta:Altro',
'',
'Emergenza:',
'',
“Richiesta:Ad oggi l'algoritmo mensile di stima reddito(序列 DASTIRED)”,
“non risulta ancora essere stato eseguito.Solitamente l'esecuzione”,
'automatica avviene entro i primi 10 giorni del mese dopo che tutte 乐”,
'dipendenze sono state soddisfatte ma attualmente vedo ancora il job 尼洛”,
'schedulatore con stato W. Chiedo la cortesia di verificare perch = C3 = A9 non =',
'SIA',
'ancora stato eseguito(problemi su flussi attesi?)e di provvedere 人的”,
“recupero。古拉爵”,
'',
'UO Richiedente:INF',
'Autore:UT07080 - SPADINI MATTEO',
'Data richiesta risoluzione:',
'Scadenza SLA:24/06/2016 14.12.36',
'',
谢谢。
答案 0 :(得分:1)
对代码稍作修改应该可以解决问题:
import collections
key_list = ['Object','Procedure','Request']
dict_list = []
msg1 = 'Object: the object\nProcedure: the procedure\n'
msg1 += 'some data\nsome more data\n'
msg1 += 'Request: request line 1\nrequest line2\nrequest line3\n'
msg2 = 'Object: another object\nProcedure: another procedure\n'
msg2 += 'some more data\nsome even more data\n'
msg2 += 'Request: another request line 1\nanother request line2\n'
msg_list =[msg1,msg2]
for msg in msg_list:
data_dict = collections.OrderedDict()
msg = msg.replace('\r','')
msg = msg.split('\n')
for row in msg:
row = row.split(":")
if row[0] in key_list:
key = row[0]
data_dict[key] = row[1]
elif key in key_list:
data_dict[key] += row[0]
else:
key = ''
dict_list.append(data_dict)
#show results
for i in dict_list:
for k,v in i.items():
print k,v
以上产生:
对象对象
程序程序数据库更多数据
请求请求行1request line2request line3
对象另一个对象
程序另一个程序更多数据更多的数据
请求另一个请求行1另一个请求line2