【问题标题】:Python Save Image from URL to ZipFilePython将图像从URL保存到ZipFile
【发布时间】:2020-02-16 13:07:09
【问题描述】:

如何将图像从 URL 保存到 zip 文件?例如,我试图将this image 保存到一个 zip 文件,但它一直抛出错误“找不到文件”。

我做错了什么?

from zipfile import ZipFile
from tempfile import TempFile
import urllib.request

with TemporaryFile() as tf:
    with ZipFile(tf, mode='w') as zf:
        image_url = 'https://upload.wikimedia.org/wikipedia/commons/a/ab/Wurmseegurke.jpg'
        url = urllib.request.open(image_url)
        filename = image_url.split('/')[-1]
        zf.write(filename, url.read())

这是完整的错误:FileNotFoundError: [Errno 2] No such file or directory: 'Wurmseegurke.jpg'

【问题讨论】:

  • 你看过 writestr() 吗?
  • @JakobF 成功了...
  • 我以为 writestr 只写字符串,所以没有考虑...

标签: python python-3.x


【解决方案1】:

TemporaryFile 关闭后会被删除,因此您的图像在写入后将不可用。 您需要使用 writestr() 在 zip 中创建一个“文件对象”:

from zipfile import ZipFile
import urllib.request
import os


image_url = 'https://upload.wikimedia.org/wikipedia/commons/a/ab/Wurmseegurke.jpg'
url = urllib.request.urlopen(image_url)
filename = image_url.split('/')[-1]

zipPath = '/tmp/%s.zip' % filename
with ZipFile(zipPath, mode='w') as zf:
    zf.writestr(filename, url.read())
print(os.path.exists(zipPath))  # probing a zip file was written!

输出:

True

【讨论】:

  • 将它从 write() 更改为 writestr() 是修复它的方法,谢谢!我必须将 TemporaryFile 用于现有进程,因此必须保持不变。
猜你喜欢
  • 2015-07-25
  • 1970-01-01
  • 2011-12-04
  • 1970-01-01
  • 1970-01-01
  • 2019-04-05
  • 2017-12-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多