Python读取zip文件中的图片(无需解压)
对于包含大量图片的大型zip文件而言,解压非常费时间,同时解压过程也会需要更大的硬盘空间。这个时候,如果Python能直接读取到zip中的图片的话,就非常有用了。本文提供PIL和cv2两种格式的图片读取。代码为本人原创,有问题可留言交流~这里用到的包是zipfile。假设有个zip文件叫“demo.zip”,其中包含"sing.jpg"、“dance.jpg”、"rap.jpg"和"basketb
·
对于包含大量图片的大型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))

GitCode 天启AI是一款由 GitCode 团队打造的智能助手,基于先进的LLM(大语言模型)与多智能体 Agent 技术构建,致力于为用户提供高效、智能、多模态的创作与开发支持。它不仅支持自然语言对话,还具备处理文件、生成 PPT、撰写分析报告、开发 Web 应用等多项能力,真正做到“一句话,让 Al帮你完成复杂任务”。
更多推荐
所有评论(0)