从字典中获取值,直到在 Python 中到达下一个键
Get value from a dictionary until next key is reached in Python
标题根本没有说明我的问题,但我会在这里告诉你。
我正在使用 Google API 解析来自 GMail 帐户的电子邮件。我需要从每封电子邮件中获取一些值。电子邮件 body 的格式如下:
Object: 有点东西。
程序:某事。
...
(很多字段)
...
请求:(可以是single-row或multi-row的值)
为了获得我需要的所有字段,我这样做:
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' 时出现问题,因为它可以是 multi-row 并且使用 'msg.split('\n')' 我得到这个:
"Request: (first row of field)",
“(第二行字段)”,
...
"(n-th 字段行)"
在 Ordered Dict 中,只有第一行作为值。
我怎样才能得到全部内容?
希望解释清楚。
这是取自 msg_list
的 msg (already splitted)
的形式:
'',
'La pratica Ticketing TSX - 2016-049044 necessita di essere
lavorata.',
'',
'Procedura: MATRIX - Enterprise Data Warehouse',
'Oggetto: Mancata esecuzione algoritmo stima reddito (DASTIRED)',
'Perimetro: Specifico',
'Priorit=C3=A0 richiesta: Alta',
'Tipologia Richiesta: Segnalazione Anomalia',
'Sottotipologia Richiesta: Altro',
'',
'Emergenza:',
'',
"Richiesta: Ad oggi l'algoritmo mensile di stima reddito (sequence
DASTIRED)",
"non risulta ancora essere stato eseguito. Solitamente l'esecuzione",
'automatica avviene entro i primi 10 giorni del mese dopo che tutte
le',
'dipendenze sono state soddisfatte ma attualmente vedo ancora il job
nello',
'schedulatore con stato W. Chiedo la cortesia di verificare
perch=C3=A9 non =',
'sia',
'ancora stato eseguito (problemi su flussi attesi?) e di provvedere
al',
'recupero. Grazie',
'',
'UO Richiedente: INF',
'Autore: UT07080 - SPADINI MATTEO',
'Data richiesta risoluzione:',
'Scadenza SLA : 24/06/2016 14.12.36',
'',
谢谢。
对您的代码稍作修改即可解决问题:
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
以上产生:
对象对象
Procedure the proceduresome datasome more data
请求请求行1请求行2请求行3
对象另一个对象
Procedure another proceduresome more datasome even more data
请求另一个请求行 1another request line2
标题根本没有说明我的问题,但我会在这里告诉你。 我正在使用 Google API 解析来自 GMail 帐户的电子邮件。我需要从每封电子邮件中获取一些值。电子邮件 body 的格式如下:
Object: 有点东西。
程序:某事。
...
(很多字段)
...
请求:(可以是single-row或multi-row的值)
为了获得我需要的所有字段,我这样做:
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' 时出现问题,因为它可以是 multi-row 并且使用 'msg.split('\n')' 我得到这个:
"Request: (first row of field)", “(第二行字段)”, ...
"(n-th 字段行)"
在 Ordered Dict 中,只有第一行作为值。 我怎样才能得到全部内容? 希望解释清楚。
这是取自 msg_list
的 msg (already splitted)
的形式:
'',
'La pratica Ticketing TSX - 2016-049044 necessita di essere lavorata.',
'',
'Procedura: MATRIX - Enterprise Data Warehouse',
'Oggetto: Mancata esecuzione algoritmo stima reddito (DASTIRED)',
'Perimetro: Specifico',
'Priorit=C3=A0 richiesta: Alta',
'Tipologia Richiesta: Segnalazione Anomalia',
'Sottotipologia Richiesta: Altro',
'',
'Emergenza:',
'',
"Richiesta: Ad oggi l'algoritmo mensile di stima reddito (sequence DASTIRED)",
"non risulta ancora essere stato eseguito. Solitamente l'esecuzione",
'automatica avviene entro i primi 10 giorni del mese dopo che tutte le',
'dipendenze sono state soddisfatte ma attualmente vedo ancora il job nello',
'schedulatore con stato W. Chiedo la cortesia di verificare perch=C3=A9 non =',
'sia',
'ancora stato eseguito (problemi su flussi attesi?) e di provvedere al',
'recupero. Grazie',
'',
'UO Richiedente: INF',
'Autore: UT07080 - SPADINI MATTEO',
'Data richiesta risoluzione:',
'Scadenza SLA : 24/06/2016 14.12.36',
'',
谢谢。
对您的代码稍作修改即可解决问题:
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
以上产生:
对象对象
Procedure the proceduresome datasome more data
请求请求行1请求行2请求行3
对象另一个对象
Procedure another proceduresome more datasome even more data
请求另一个请求行 1another request line2