Python 2.7 – 从电子邮件文件中提取Zip
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Python 2.7 – 从电子邮件文件中提取Zip,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1658字,纯文字阅读大概需要3分钟。
内容图文
我需要检索.zip存档,检索.zip中的文件并提取其数据. .zip存档附加到电子邮件消息文件;我没有使用邮件协议来访问邮箱.我能够解析消息……
...
from email.parser import Parser
...
for fileName in os.listdir(mailDir):
...
message = Parser().parse(open(mailDir + '/' + fileName, 'r'))
...
for part in message.walk():
if part.get_content_type() == 'application/octet-stream':
当我第一次开始编写这段代码时,我正在测试一封附有.csv的电子邮件,并且在访问附件和拉出数据时没有问题,但现在我正在使用.zip(包含以前使用过的电子邮件) .csv)我被困住了.添加…
import zipfile
…但似乎我需要将附加的.zip保存到文件系统才能使用zipfile.我宁愿不这样做,并且想(希望)我可以简单地使用……
zipfile.ZipFile(the_base64_string_from_message, 'r')
但那失败了.如何在不在文件系统中创建.zip存档的情况下访问存档?另外,也许我甚至不应该使用电子邮件模块(只使用它,所以我可以很容易地找到附件)???
解决方法:
你可能正在寻找的是StringIO模块,它包装了一个字符串,为它提供了一个文件的接口.此外,您需要从base64解码电子邮件附件有效负载,以便您处理正确的字节.这是一个将附件解压缩到当前工作目录的示例:
import email
import zipfile
from cStringIO import StringIO
import base64
with open('some_email_with_zip.eml', 'r') as f:
m = email.message_from_file(f)
for part in m.walk():
# You might also check to see if the content-type for your zip files is
# application/zip instead of application/octet-stream
if part.get_content_type() == 'application/zip':
zip_bytes = base64.b64decode(part.get_payload())
file_wrapper = StringIO(zip_bytes)
if zipfile.is_zipfile(file_wrapper):
with zipfile.ZipFile(file_wrapper, 'r') as zf:
zf.extractall()
如果要为解压缩文件指定与当前目录不同的路径,可以将其指定为extractall()的参数:
zf.extractall('/path/for/unzipped/files')
内容总结
以上是互联网集市为您收集整理的Python 2.7 – 从电子邮件文件中提取Zip全部内容,希望文章能够帮你解决Python 2.7 – 从电子邮件文件中提取Zip所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。