You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改Python代码下载邮件zip附件并提取其中的csv文件?

Python邮件ZIP附件下载及CSV提取修改方案

无需额外安装第三方依赖,使用Python内置的zipfile和io模块即可实现功能,原有检索发件人、主题的逻辑无需改动,仅修改附件处理部分即可

第一步:新增模块导入

在原有代码的导入部分增加如下内容:

import zipfile
from io import BytesIO

第二步:修改附件处理逻辑

原有处理CSV附件的代码保留,新增ZIP格式附件的识别、读取、解压逻辑,核心代码片段如下:

# 此处保留你原有通过imap检索、匹配发件人/主题的全部逻辑
# 以下为匹配到目标邮件后的附件处理部分修改
for part in message.walk():
    if part.get_content_disposition() == 'attachment':
        # 解码附件文件名,解决中文文件名乱码问题
        filename = decode_header(part.get_filename())[0][0]
        if isinstance(filename, bytes):
            filename = filename.decode()
        
        # 新增ZIP附件处理分支
        if filename.lower().endswith('.zip'):
            # 直接读取zip文件二进制内容,无需先落盘
            zip_binary = part.get_payload(decode=True)
            with zipfile.ZipFile(BytesIO(zip_binary), 'r') as zip_obj:
                # 遍历压缩包内所有文件,只提取csv格式文件
                for zip_file_item in zip_obj.namelist():
                    if zip_file_item.lower().endswith('.csv'):
                        # 解压到指定本地目录,替换为你自己的保存路径即可
                        zip_obj.extract(zip_file_item, path='./target_save_dir')
                        print(f"成功提取CSV文件:{zip_file_item}")
        
        # 原有CSV附件处理逻辑保留,兼容旧格式邮件
        elif filename.lower().endswith('.csv'):
            save_path = os.path.join('./target_save_dir', filename)
            with open(save_path, 'wb') as f:
                f.write(part.get_payload(decode=True))
            print(f"成功保存CSV附件:{filename}")

常见问题调整

  • 若需要先保存ZIP压缩包到本地再解压,直接将zip_binary写入本地.zip文件后,再传入zipfile.ZipFile读取本地文件路径即可
  • 若ZIP包设置了解压密码,在with代码块内新增一行zip_obj.setpassword(b'你的解压密码')即可
  • 若解压后CSV文件名出现乱码,可尝试将zip_file_item用gbk或cp437编码重新解码后重命名文件

内容的提问来源于stack exchange,提问作者Rich

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 10:15:06