0

SyntaxErrorメールを解析するスクリプトを書いていますが、次の部分の for ループにいくつかあります。

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
4

1 に答える 1

2

dict 内包表記をまだサポートしていない古い Python バージョンでこれを実行しています。この{key: value for ... in ...}構文は、Python 2.7 以降でのみ使用できます。

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

行を辞書コンストラクターとジェネレーター式に置き換えます。

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

ただし、キーとアイテムのペアごとに電子メール メッセージを読むことは避けたいと考えてEXTRACTSいます。外側のループごとに 1読み取ります。

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()))
于 2013-10-18T19:05:39.737 に答える