在this post中的问题几乎完美描述的过程中,我是 将matplotlib图的png文件写入BytesIO实例。然后我将其中的每一个写入另一个带有ZipFile实例的BytesIO实例,调用zipfile.writestr方法。
制作地块
import pandas as pd
import matplotlib.pyplot as plt
def write_plot(data):
plot_buff = BytesIO()
fig, ax = plt.subplots()
dataframe = pd.DataFrame(data)
dataframe.plot(x="length", y="left", ax=ax, color="b")
dataframe.plot(x="length", y="right", ax=ax, color="r")
plt.savefig(plot_buff)
return plot_buff
存档图
zip_buff = BytesIO()
with ZipFile(zip_buff, "w") as zipfile:
for number, data_set in enumerate(data_sets):
plot = write_plot(data_set)
zipfile.writestr("{}.png".format(number), plot.getvalue())
with open(file_path, "wb") as write_buff:
write_buff.write(zip_buff.getvalue())
但我回来的zip档案给了我错误: 错误0x80070057:参数不正确
它以7-zip打开,但我不能指望我的用户知道或尝试。
编辑:对不起,缺少的“wb”参数是问题中的拼写错误,它是我实际代码的一部分。
答案 0 :(得分:0)
道歉,这是一个不好的例子。我遇到的问题无法从中确定,而且非常简单。在构建完全可验证的示例的过程中,我发现示例代码确实生成了可以使用WinZip提取的png图像。这给了我一个参考点,我的实际代码与稍有不同的例子。事实证明我已将“:”放入文件名中。