使用extract-msg模块批量导出Outlook .MSG数据至CSV的技术问询
批量导出文件夹中.msg文件数据到CSV的解决方案
嘿,你已经迈出了第一步——搞定单个.msg文件的导出,现在就差批量处理整个文件夹里的.msg文件啦!我来帮你把代码调整一下,轻松实现批量导出的需求。
先看修改后的完整代码
import extract_msg import csv import os # 替换成你的.msg文件所在文件夹路径 msg_folder = r'C:\你的文件夹路径' # 最终生成的CSV文件路径 csv_file_path = r'C:\Email.csv' # 定义要导出的字段 fieldnames = ['Subject', 'Date', 'Sender'] # 第一步:先创建CSV文件并写入表头 with open(csv_file_path, mode='w', newline='', encoding='utf-8') as file: writer = csv.DictWriter(file, fieldnames=fieldnames) writer.writeheader() # 第二步:遍历文件夹里所有的.msg文件 for filename in os.listdir(msg_folder): # 只处理以.msg结尾的文件,忽略大小写 if filename.lower().endswith('.msg'): msg_path = os.path.join(msg_folder, filename) try: # 读取.msg文件内容 msg = extract_msg.Message(msg_path) # 整理需要导出的数据 msg_data = { 'Subject': msg.subject, 'Date': msg.date, 'Sender': msg.sender } # 追加写入CSV文件 with open(csv_file_path, mode='a', newline='', encoding='utf-8') as file: writer = csv.DictWriter(file, fieldnames=fieldnames) writer.writerow(msg_data) print(f"已成功处理:{filename}") except Exception as e: print(f"处理文件{filename}时出错:{str(e)}")
关键改动说明
- 遍历文件夹:用
os.listdir()获取文件夹内所有文件,再通过endswith('.msg')筛选出目标文件,搭配os.path.join()拼接完整路径,避免因路径格式问题报错。 - CSV写入逻辑:先以
w模式创建CSV并写入表头,之后循环里用a模式追加每条数据,这样不会覆盖已写入的内容,保证所有数据都在同一个文件里。 - 异常处理:添加
try-except块,就算遇到损坏的.msg文件或读取异常,程序也不会直接崩溃,还会提示具体错误,方便你排查问题。 - 编码与换行优化:指定
encoding='utf-8'避免中文乱码,newline=''是csv模块官方推荐的写法,防止生成多余空行。
灵活替代方案
如果你觉得os.listdir()的筛选逻辑不够直观,也可以用glob模块直接匹配所有.msg文件:
import glob msg_files = glob.glob(os.path.join(msg_folder, '*.msg')) for msg_path in msg_files: # 后续读取、写入逻辑和上面一致即可
这样就能一次性把文件夹里所有.msg文件的指定字段都导出到同一个CSV文件里啦!
内容的提问来源于stack exchange,提问作者RP_MISWitham
相关产品推荐
相关产品推荐

