热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

从批量eml文件中提取附件的Python代码实现方法

本文介绍了使用Python代码从批量eml文件中提取附件的实现方法,包括获取eml附件信息、递归文件夹下所有文件、创建目的文件夹等步骤。通过该方法可以方便地提取eml文件中的附件,并保存到指定的文件夹中。

从批量eml文件中提取附件,使用方式如下

 


代码如下

1 import email
2 import os
3 import sys
4
5 #获取eml附件信息
6 def Get_Annex_Message(FilePath, Annex_Path):
7 global sum
8 try:
9 fp = open(FilePath, 'rb') #打开任意格式文件,通过email库来判断是否为eml文件
10 msg = email.message_from_binary_file(fp)
11 for part in msg.walk(): #循环信件中的每一个mime的数据块
12 if part.get_content_maintype() == 'multipart':
13 continue
14 Annex_name = part.get_filename()
15 if Annex_name: #如果附件存在名字
16 Annex_name = str(sum) + '.' + Annex_name
17 fp = open(os.path.join(Annex_Path, Annex_name), 'wb')
18 fp.write(part.get_payload(decode=True))
19 sum += 1
20
21 except Exception as e:
22 print(e)
23 return
24
25 #递归文件夹下所有文件
26 def List_Filepath(Eml_Path, Annex_Path):
27 for parent,dirnames,filenames in os.walk(Eml_Path): #遍历文件夹
28 for dirname in dirnames: #对文件夹进行递归
29 List_Filepath(dirname, Annex_Path)
30 for filename in filenames: #r对文件进行判断
31 FilePath = os.path.join(parent,filename)
32 Get_Annex_Message(FilePath, Annex_Path)
33
34 #创建目的文件夹
35 def Create_Dir(Annex_Path):
36 if os.path.exists(Annex_Path):
37 print("dir exists, Annex file will create in %s" % Annex_Path)
38 else:
39 os.mkdir(Annex_Path)
40
41 #主函数
42 def main():
43 global sum
44 sum = int(1)
45 Eml_Path = sys.argv[1] #第一个参数为eml所在文件夹
46 Annex_Path = sys.argv[2] #第二个参数为eml附件输出的路径
47 Create_Dir(Annex_Path) #创建保存附加的文件夹
48 List_Filepath(Eml_Path, Annex_Path)
49
50 if __name__ == "__main__":
51 main()
52

 


推荐阅读
  • 本文详细介绍如何使用Python进行配置文件的读写操作,涵盖常见的配置文件格式(如INI、JSON、TOML和YAML),并提供具体的代码示例。 ... [详细]
  • 1.如何在运行状态查看源代码?查看函数的源代码,我们通常会使用IDE来完成。比如在PyCharm中,你可以Ctrl+鼠标点击进入函数的源代码。那如果没有IDE呢?当我们想使用一个函 ... [详细]
  • 本文详细解析了Python中的os和sys模块,介绍了它们的功能、常用方法及其在实际编程中的应用。 ... [详细]
  • 本文将介绍如何编写一些有趣的VBScript脚本,这些脚本可以在朋友之间进行无害的恶作剧。通过简单的代码示例,帮助您了解VBScript的基本语法和功能。 ... [详细]
  • 本文介绍了Java并发库中的阻塞队列(BlockingQueue)及其典型应用场景。通过具体实例,展示了如何利用LinkedBlockingQueue实现线程间高效、安全的数据传递,并结合线程池和原子类优化性能。 ... [详细]
  • Python自动化处理:从Word文档提取内容并生成带水印的PDF
    本文介绍如何利用Python实现从特定网站下载Word文档,去除水印并添加自定义水印,最终将文档转换为PDF格式。该方法适用于批量处理和自动化需求。 ... [详细]
  • 本文介绍了如何在C#中启动一个应用程序,并通过枚举窗口来获取其主窗口句柄。当使用Process类启动程序时,我们通常只能获得进程的句柄,而主窗口句柄可能为0。因此,我们需要使用API函数和回调机制来准确获取主窗口句柄。 ... [详细]
  • Python 异步编程:深入理解 asyncio 库(上)
    本文介绍了 Python 3.4 版本引入的标准库 asyncio,该库为异步 IO 提供了强大的支持。我们将探讨为什么需要 asyncio,以及它如何简化并发编程的复杂性,并详细介绍其核心概念和使用方法。 ... [详细]
  • 本文介绍如何使用Objective-C结合dispatch库进行并发编程,以提高素数计数任务的效率。通过对比纯C代码与引入并发机制后的代码,展示dispatch库的强大功能。 ... [详细]
  • 本文将介绍如何使用 Go 语言编写和运行一个简单的“Hello, World!”程序。内容涵盖开发环境配置、代码结构解析及执行步骤。 ... [详细]
  • Java 类成员初始化顺序与数组创建
    本文探讨了Java中类成员的初始化顺序、静态引入、可变参数以及finalize方法的应用。通过具体的代码示例,详细解释了这些概念及其在实际编程中的使用。 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 本文详细介绍了如何在Linux系统上安装和配置Smokeping,以实现对网络链路质量的实时监控。通过详细的步骤和必要的依赖包安装,确保用户能够顺利完成部署并优化其网络性能监控。 ... [详细]
  • 本文深入探讨 MyBatis 中动态 SQL 的使用方法,包括 if/where、trim 自定义字符串截取规则、choose 分支选择、封装查询和修改条件的 where/set 标签、批量处理的 foreach 标签以及内置参数和 bind 的用法。 ... [详细]
  • 本文详细介绍了Akka中的BackoffSupervisor机制,探讨其在处理持久化失败和Actor重启时的应用。通过具体示例,展示了如何配置和使用BackoffSupervisor以实现更细粒度的异常处理。 ... [详细]
author-avatar
波波微博1987_704
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有