Python读取zip文件中的图片(无需解压) | 您所在的位置:网站首页 › 怎么打印zip文件夹内容 › Python读取zip文件中的图片(无需解压) |
对于包含大量图片的大型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 实验室设备网 版权所有 |