Errno 20:保存到 zip 文件时不是目录
Errno 20: Not a directory when saving into zip file
当我尝试将 pyplot 图另存为 jpg 时,我不断收到目录错误,指出给定的文件名不是目录。我在 Colab 工作。我有一个名为 z_img 的 numpy 数组并打开了一个 zip 文件。
import matplotlib.pyplot as plt
from zipfile import ZipFile
zipObj = ZipFile('slices.zip', 'w') # opening zip file
plt.imshow(z_img, cmap='binary')
绘图工作正常。我做了一个将图像保存到 Colab 的常规内存中的测试,如下所示:
plt.savefig(str(ii)+'um_slice.jpg')
这非常有效,除了我打算在 for 循环中使用这段代码。 ii 是区分每个图像的索引,将创建数百个图像,因此我希望它们进入 zipfile。现在,当我尝试将路径添加到压缩文件时:
plt.savefig('/content/slices.zip/'+str(ii)+'um_slice.jpg')
我得到:NotADirectoryError:[Errno 20] 不是目录:'/content/slices.zip/150500um_slice.jpg'
我认为这是因为 {}.jpg 字符串是文件名,而不是目录本身。但我对 Python 很陌生,不知道如何将情节放入 zip 文件中。这就是我想要的。希望得到任何建议!
首先,对于任何非摄影内容(即漂亮和柔和),JPEG 都是错误的格式。使用不同的文件格式会更好。 PNG 适合像素,SVG 适合矢量图形(以防您稍后将其嵌入网站!),PDF 也适合矢量。
错误消息非常准确:您不能像保存目录一样保存到 zip 文件。
多种解决方法:
- 使用
tempfile
模块的 mkdtemp
创建一个临时目录,保存到其中,然后压缩结果
- 不是保存到文件名中,而是保存到缓冲区中(我猜是 BytesIO)并将其附加到压缩流中(我不太熟悉
ZipFile
)
- 使用PDF作为输出并简单地生成一个multipage PDF;这并不难,从长远来看可能会好得多。您仍然可以将该矢量图形结果转换为 PNG(或任何其他所需的像素格式9,但就目前而言,它 space 高效,可任意缩放并将所有页面保存在一个地方。导入选定页面很容易进入 LaTeX(事实上,
\includegraphics
直接执行)或进入网站 (pdf.js)。
根据文档,matplotlib.pyplot.savefig accepts a binary file-like object. ZipFile.open 创建类似于对象的二进制文件。这两个必须在一起!
with zipobj.open(str(ii)+'um_slice.jpg', 'w') as fp:
plt.savefig(fp)
当我尝试将 pyplot 图另存为 jpg 时,我不断收到目录错误,指出给定的文件名不是目录。我在 Colab 工作。我有一个名为 z_img 的 numpy 数组并打开了一个 zip 文件。
import matplotlib.pyplot as plt
from zipfile import ZipFile
zipObj = ZipFile('slices.zip', 'w') # opening zip file
plt.imshow(z_img, cmap='binary')
绘图工作正常。我做了一个将图像保存到 Colab 的常规内存中的测试,如下所示:
plt.savefig(str(ii)+'um_slice.jpg')
这非常有效,除了我打算在 for 循环中使用这段代码。 ii 是区分每个图像的索引,将创建数百个图像,因此我希望它们进入 zipfile。现在,当我尝试将路径添加到压缩文件时:
plt.savefig('/content/slices.zip/'+str(ii)+'um_slice.jpg')
我得到:NotADirectoryError:[Errno 20] 不是目录:'/content/slices.zip/150500um_slice.jpg'
我认为这是因为 {}.jpg 字符串是文件名,而不是目录本身。但我对 Python 很陌生,不知道如何将情节放入 zip 文件中。这就是我想要的。希望得到任何建议!
首先,对于任何非摄影内容(即漂亮和柔和),JPEG 都是错误的格式。使用不同的文件格式会更好。 PNG 适合像素,SVG 适合矢量图形(以防您稍后将其嵌入网站!),PDF 也适合矢量。
错误消息非常准确:您不能像保存目录一样保存到 zip 文件。
多种解决方法:
- 使用
tempfile
模块的mkdtemp
创建一个临时目录,保存到其中,然后压缩结果 - 不是保存到文件名中,而是保存到缓冲区中(我猜是 BytesIO)并将其附加到压缩流中(我不太熟悉
ZipFile
) - 使用PDF作为输出并简单地生成一个multipage PDF;这并不难,从长远来看可能会好得多。您仍然可以将该矢量图形结果转换为 PNG(或任何其他所需的像素格式9,但就目前而言,它 space 高效,可任意缩放并将所有页面保存在一个地方。导入选定页面很容易进入 LaTeX(事实上,
\includegraphics
直接执行)或进入网站 (pdf.js)。
根据文档,matplotlib.pyplot.savefig accepts a binary file-like object. ZipFile.open 创建类似于对象的二进制文件。这两个必须在一起!
with zipobj.open(str(ii)+'um_slice.jpg', 'w') as fp:
plt.savefig(fp)