我试图压缩叶 map html,以减少大小,以附加到邮箱发送通过Sendgrid.

map_content = m.get_root().render()
zip_buffer = io.BytesIO()
with zipfile.ZipFile(zip_buffer, 'w', zipfile.ZIP_DEFLATED) as zipf:
        zipf.writestr("event_map.html", map_content.encode('utf-8'))
        zip_buffer.seek(0)

attachments = [location_attachment, coverage_attachment, zip_buffer.getvalue()]
filenames = [
            "Raw Data 1.csv",
            "Data 2.csv",
            "event_map.zip"
        ]
filetypes = ["text/csv", "text/csv", "application/zip"]

此代码允许我创建zip并通过邮箱发送,但zip附件无法打开,Windows抛出无效Zip错误.

有人能提出一个解决办法吗?

谢谢你

推荐答案

似乎问题可能是在将 map 内容添加到zip文件之前如何对其进行编码.在将内容添加到zip文件之前,不要对其进行编码,而应该直接将其添加为字节.以下是您代码的更正版本:

import folium
import io
import zipfile
import sendgrid
from sendgrid.helpers.mail import (
    Attachment,
    FileContent,
    FileName,
    FileType,
    Disposition,
    ContentId,
    Email,
    Mail,
)

# Assuming you already have 'm' defined as your Folium map object
map_content = m.get_root().render()
zip_buffer = io.BytesIO()

with zipfile.ZipFile(zip_buffer, 'w', zipfile.ZIP_DEFLATED) as zipf:
    zipf.writestr("event_map.html", map_content)

# Reset buffer position to beginning
zip_buffer.seek(0)

# Prepare SendGrid attachments
attachments = [
    Attachment(
        FileContent(zip_buffer.getvalue()),
        FileName("event_map.zip"),
        FileType("application/zip"),
        Disposition('attachment')
    )
]

Python相关问答推荐

使用mySQL的SQlalchemy过滤重叠时间段

Pandas 在最近的日期合并,考虑到破产

替换字符串中的多个重叠子字符串

如何使用symy打印方程?

追溯(最近最后一次调用):文件C:\Users\Diplom/PycharmProject\Yolo01\Roboflow-4.py,第4行,在模块导入roboflow中

scikit-learn导入无法导入名称METRIC_MAPPING64'

梯度下降:简化要素集的运行时间比原始要素集长

使用密钥字典重新配置嵌套字典密钥名

Scrapy和Great Expectations(great_expectations)—不合作

pandas在第1列的id,第2列的标题,第3列的值,第3列的值?

与命令行相比,相同的Python代码在Companyter Notebook中运行速度慢20倍

Numpyro AR(1)均值切换模型抽样不一致性

处理Gekko的非最优解

递归函数修饰器

使用tqdm的进度条

有没有办法让Re.Sub报告它所做的每一次替换?

如何编辑此代码,使其从多个EXCEL文件的特定工作表中提取数据以显示在单独的文件中

如何获得满足掩码条件的第一行的索引?

如何从一个维基页面中抓取和存储多个表格?

#将多条一维曲线计算成其二维数组(图像)表示