Python读取zip文件中的图片(无需解压) 您所在的位置:网站首页 怎么打印zip文件夹内容 Python读取zip文件中的图片(无需解压)

Python读取zip文件中的图片(无需解压)

2024-07-07 21:52| 来源: 网络整理| 查看: 265

对于包含大量图片的大型zip文件而言,解压非常费时间,同时解压过程也会需要更大的硬盘空间。这个时候,如果Python能直接读取到zip中的图片的话,就非常有用了。

本文提供PIL和cv2两种格式的图片读取。代码为本人原创,有问题可留言交流~

这里用到的包是zipfile。假设有个zip文件叫“demo.zip”,其中包含"sing.jpg"、“dance.jpg”、"rap.jpg"和"basketball.jpg"四张图片。

from zipfile import ZipFile from io import BytesIO from PIL import Image import cv2 zip_file = 'demo.zip' zo = ZipFile(zip_file, 'r') print(zo.namelist()) # ['basketball.jpg', 'dance.jpg', 'rap.jpg','sing.jpg'] index = 0 # select image by index img_name = zo.namelist()[index] # 'basketball.jpg' img = Image.open(BytesIO(zo.read(img_name))) print(img.size) # (256, 256) img.save('imgs/basketball.jpg') img_cv2 = cv2.cvtColor(np.asarray(img), cv2.COLOR_RGB2BGR) print(img_cv2.shape) # (256, 256, 3) cv2.imwrite('imgs/basketball_cv2.jpg', img_cv2)

这里用到一个字节流BytesIO,承接住zipfile读出的字节流。PIL.Image则可以直接读这个BytesIO字节流,将字节流转成图片就可以保存了。

扩展:如果抽取通用类数据(不限于图片)

from zipfile import ZipFile zip_file = 'demo.zip' save_folder = 'demo/' zo = ZipFile(zip_file, 'r') print(zo.namelist()) # ['basketball.txt', 'dance.pdf', 'rap.jpg','sing.avi'] index = 0 # select image by index content = zo.namelist()[index] # 'basketball.txt' zo.extract(content, osp.join(save_folder, content))


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有