2016-07-12 4 views
-1

제목에 내 문제가 전혀 설명되어 있지 않지만 여기에 표시됩니다. Google API를 사용하여 Gmail 계정의 이메일을 구문 분석하고 있습니다. 각 전자 우편에서 나는 몇몇 가치를 얻을 필요가있다. 이메일 본문은 다음과 같이 구성됩니다.Python에서 다음 키에 도달 할 때까지 사전에서 값을 가져옵니다.

개체 : Something.

절차 : 뭔가.

...

(많은 필드)

...

요청 : (될 수있는 값은 단일 행 또는 다중 행)

가 얻을 수있는 모든 필요한 필드 :

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 

특정 필드 'Req를 구문 분석 할 때 문제가 발생합니다. (필드의 첫 번째 행) ", "(필드의 두 번째 행) 요청 : "요청을 : 다중 행 및 'msg.split ('\ n ')') " ...

"필드 (제 n 행)의 "정렬 딕셔너리에서

값으로 첫 번째 행을 진행한다. 전체 콘텐츠를 어떻게 얻을 수 있습니까? 잘 설명되기를 바랍니다.

'',

'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',

'',

감사합니다 :

는 여기가 msg_list에서 찍은 msg (already splitted)의 형태이다.

+1

'Request :'필드의 끝 - 문자열의 끝/파일 끝/다른 구분 기호/etc ...의 시작을 결정하는 것은 무엇입니까? –

+0

@JonClements 빈 행 – echo

+0

좋습니다 - 빈 줄이 항목을 효과적으로 구분합니까? 즉 : - 어딘가에 파일에 하나 이상의 레코드가 있고 그 레코드에서 dicts 목록을 만들려고합니까? (정확하게 이해한다면?) –

답변

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 

: 오브젝트
절차 proceduresome datasome 더 많은 데이터
요청 요청 라인 1request line2request 세 번째 줄
객체
개체 다른 객체
프로 시저 다른 프로 시저 더 많은 데이터 더 많은 데이터 더
다른 요청 라인 1a 요청 nother request line2

+0

이 오류가 발생했습니다 : UnboundLocalError : 할당 전에 로컬 변수 'key'가 참조되었습니다. 'global'을 사용해야합니까? – echo

+0

msg_list : for 루프의 for msg에서 초기화하십시오. key = ''는 괜찮을 것입니다. –

+0

작은 문제가 하나 더 생기면 다음 필드도 생깁니 까? – echo

관련 문제