python中syntaxerror,Python:SyntaxError

I'm writing a script to parse an email, but there is some SyntaxError on the for loop in the following part:

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()

})

Please help me out of this!

EDIT:

File "/IS/extraction.py", line 52

for key, value in EXTRACTS.items()

^ SyntaxError: invalid syntax

解决方案

You are running this on an older Python version that doesn't yet support dict comprehensions. The {key: value for ... in ...} syntax is only available in Python 2.7 and newer:

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 "", line 6

for key, value in EXTRACTS.items()

^

SyntaxError: invalid syntax

Replace the line with a dictionary constructor and a generator expression:

writer.writerow(dict(

(key, value(email.message_from_file(open(os.path.join(MAILDIR, mail), 'r'))))

for key, value in EXTRACTS.items()

))

You do want to avoid reading the email message for every key-item pair in EXTRACTS though; read it once per outer loop:

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()))

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值