2013-10-18 6 views
0

나는 이메일을 구문 분석하는 스크립트를 작성하지만, 다음과 같은 부분에 for 루프에 대한 몇 가지 SyntaxError를이있어 :파이썬 : 구문 에러

def main(): 
    writer = csv.DictWriter(open('features.csv', 'w'), list(EXTRACTS.keys())) 
    for mail in os.listdir(MAILDIR): 
     writer.writerow({ 
       key: value(email.message_from_file(open(os.path.join(MAILDIR, mail), 'r'))) 
      for key, value in EXTRACTS.items() 
      }) 

이에서 저를 도와주세요!

편집 :

파일 "/IS/extraction.py", 라인 (52)

for key, value in EXTRACTS.items() 
^SyntaxError: invalid syntax 
+0

'값 (email.message_from_file (오픈 (os.path.join (MAILDIR, 메일), 'R')))'제대로 보이지 나던 : 한번 외부 루프 당 읽어 보시기 바랍니다. 너 뭐하려고? – karthikr

+0

'추출 '이란 무엇입니까? – oleg

+0

@karthikr : 'EXTRACTS' 사전의 값을 호출 할 수 있다면 문제가 없습니다. –

답변

2

아직 DICT 함축를 지원하지 않는 구형 파이썬 버전이 실행 .

writer.writerow(dict(
    (key, value(email.message_from_file(open(os.path.join(MAILDIR, mail), 'r')))) 
    for key, value in EXTRACTS.items() 
)) 

당신은 모든 키에 대한 전자 메일 메시지를 읽는 피하고 싶은 않습니다

Python 2.6.8 (unknown, May 22 2013, 11:58:55) 
[GCC 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2336.11.00)] on darwin 
Type "help", "copyright", "credits" or "license" for more information. 
>>> def main(): 
...  writer = csv.DictWriter(open('features.csv', 'w'), list(EXTRACTS.keys())) 
...  for mail in os.listdir(MAILDIR): 
...   writer.writerow({ 
...     key: value(email.message_from_file(open(os.path.join(MAILDIR, mail), 'r'))) 
...    for key, value in EXTRACTS.items() 
    File "<stdin>", line 6 
    for key, value in EXTRACTS.items() 
    ^
SyntaxError: invalid syntax 

가 사전 생성자와 발전기 표정으로 라인을 교체하십시오 {key: value for ... in ...} 구문은 파이썬 2.7에서 사용할 새로운이다 그래도 EXTRACTS의 항목 쌍;

def main(): 
    writer = csv.DictWriter(open('features.csv', 'w'), list(EXTRACTS.keys())) 
    for mail in os.listdir(MAILDIR): 
     mail = email.message_from_file(open(os.path.join(MAILDIR, mail), 'r')) 
     writer.writerow(dict((key, value(mail)) for key, value in EXTRACTS.items()))