对于包含大量图片的大型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))
                    对于包含大量图片的大型zip文件而言,解压非常费时间,同时解压过程也会需要更大的硬盘空间。这个时候,如果Python能直接读取到zip中的图片的话,就非常有用了。本文提供PIL和cv2两种格式的图片读取。代码为本人原创,有问题可留言交流~这里用到的包是zipfile。假设有个zip文件叫“demo.zip”,其中包含"sing.jpg"、“dance.jpg”、"rap.jpg"和"basketball.jpg"四张图片。from zipfile import ZipFilefrom io impo
				
带有 .zip 扩展名的文件,是一个包含许多文件文件夹的压缩包。因为压缩之后,不仅会减少一个文件的大小,还可以把需要传输的文件数降到最低(1 个),这样很适合网络传输。压缩包也称为归档包。 利用 zipfile 模块的函数, 我们就可以创建或解压 ZIP 文件。 1 创建 ZIP 文件 要创建 ZIP 文件,必须以 “ 写模式 ” 打开 ZipFile 对象,即传入 ‘w’ 作为第二个参数。然后向 ZipFile 对象的 write() 方法传入需要压缩的文件名与压缩算法类型, Python 就会把它放入 ZIP 文件。 write() 方法的第一个参数是一个字符串,代表要添加的文件名。
之前项目遇到个需求,总监让我们把从服务器下载下来的资源不解压直接读取里面的资源,这样的话就省去了一个个校验资源是否正确的步骤,听着貌似有点道理。。。废话不多说直接上代码。 目前我所试验过的可以读取的资源有文本、图片、xml文件zip包目录结构:res/txt/data.json 文件sd卡路径:android.os.Environment.getExternalStorage...
§01 压缩文件 为了方便存储于交换文件,很多的数据文件通常以打包压缩的方式进行存储和传送。可以直接使用很多OS的压缩打包程序完成压缩文件的打包压缩和解压过程。如何在Python下对于这些压缩文件进行存储呢? zipfile操作压缩文件 根据 【python】详解zipfile模块读取处理压缩文件实例 介绍zipfile模块读取 压缩文件的实际操作。 zipfilepython里用来做zip格式编码的压缩和解压缩的,由于是很常见的zip格式,所以这个模块使用频率也是比较高的。 zipfi
python解压读取zip压缩包图片/文件 限于电脑上空间不够,没有办法将上百G的数据集解压到电脑上,因此需要一种方法能够直接读取压缩包内的图片进行训练。 首先,代码如下: #!/usr/bin/env python3 #coding=utf-8 #============================# #Program:readzip.py # 不解压读取.zip压缩包内的图片并显示 #Date:19-11-21 #Author:liheng #Version:V1.0
ZIP文件即压缩包,pythonzipfile模块可以很容易地实现ZIP文件读取解压和创建。 目录读取解压创建 使用前需要导入zipfile模块。 import zipfile 首先,通过zipfile.ZipFile()函数,创建ZipFile对象。 f = zipfile.ZipFile('filename.zip') 接下来,可以通过namelist()方法获取压缩包的所有文件文件夹名称列表。 f.namelist() 压缩包文件可以通过getinfo()方法传递给特定文件
//zip数据处理 public List<Map<String,Object>> readZipFile(String file,ChironUser user) throws Exception { //ZipFile zf = new ZipFile(file); int i=0; List<Map<String,Object&g...
作者已停止维护,所以使用时需要在文档基础上,做必要的修改。 2)笔者用以下载服务器上一些简单的资源,比如Json,Png,这些资源都是打包成zip包的形式,尽量减小包体,便以传输。 3)由于是zip的形式传输,所以资源下载到本地之后,会有一个解压缩保存本地的过程,解压缩完毕得到对应资源后,需要删去zip包。 4)涉及到Json解析的时候,使用Gson库进行解析。 zip_file = zipfile.ZipFile('example.zip', 'r') zip_file.extractall('/path/to/destination/folder') zip_file.close() 其,'example.zip'为要解压zip文件名,'/path/to/destination/folder'为要解压到的目标文件夹路径。注意,如果目标文件夹不存在,需要先创建。 ### 回答2: Python是一种广泛使用的高级编程语言,它凭借着强大的库支持和简单的语法,被广泛地应用于多个领域。在 Python 解压文件是一项很常见的任务。这篇文章将教你如何通过 Python 解压Zip 文件到指定目录。 首先,我们需要导入 Python 自带的 zipfile 模块,它提供了许多用于读取和写入 Zip 文件的工具函数。接下来,我们需要创建一个 ZipFile 对象,以打开要解压缩的 Zip 文件。其语法如下: ```python import zipfile zip_file = zipfile.ZipFile('/path/to/archive.zip', 'r') 这里,`/path/to/archive.zip` 是你要操作的 Zip 文件的路径,`'r'` 参数意味着我们只需要读取文件,而不需要写入或修改。 下一步,我们需要使用 `extractall()` 函数将 Zip 文件解压到指定的目录。其语法如下: ```python import zipfile zip_file = zipfile.ZipFile('/path/to/archive.zip', 'r') zip_file.extractall('/path/to/destination/folder') zip_file.close() 在这里,我们使用 `extractall()` 函数将 Zip 文件解压缩到 `/path/to/destination/folder` 目录。请注意,所有文件和目录都将解压缩到此目录。最后,我们需要使用 `close()` 函数关闭 ZipFile 对象。 如果你只想解压Zip 文件的特定文件,而不是整个文件夹,可以使用 `extract()` 函数。其语法如下: ```python import zipfile zip_file = zipfile.ZipFile('/path/to/archive.zip', 'r') zip_file.extract('file_name.txt', '/path/to/destination/folder') zip_file.close() 这将只解压缩名为 `file_name.txt` 的文件,而不是整个文件夹。 总之,Python 提供了许多简单的方法来解压Zip 文件。无论您是需要将整个 Zip 文件解压缩到一个目录,还是只需要解压缩特定的文件,您都可以使用 Pythonzipfile 模块轻松完成。 ### 回答3: 在Python,要解压ZIP文件并将其保存到指定目录需要使用标准库的`zipfile`模块。下面是详细的步骤: 1. 导入`zipfile`模块,并指定要解压ZIP文件的路径。 ```python import zipfile zip_file = zipfile.ZipFile('path/to/zip_file.zip') 2. 提取ZIP文件的所有文件名,并创建目标目录。 ```python import os target_dir = 'path/to/target_directory' for name in zip_file.namelist(): # 用os.path.join()构造文件的绝对路径 # 删除ZIP文件名前缀,用目标目录替换 target_path = os.path.join(target_dir, name.replace('zip_file/', '')) # 如果这是一个目录,就创建目录 if name.endswith('/'): os.makedirs(target_path, exist_ok=True) else: # 用open()打开文件,并将其写入目标目录 with open(target_path, 'wb') as outfile: outfile.write(zip_file.read(name)) 在这个步骤,我们使用了循环遍历ZIP文件的所有文件名。然后,我们用`os.path.join()`将文件名与目标目录结合起来,创建文件的绝对路径。接着,我们检查这个文件名是否以斜杠结尾。如果以斜杠结尾,说明这是一个目录,就用`os.makedirs()`创建目录;否则,我们用`open()`打开文件,将其写入目标目录。 3. 关闭ZIP文件。 ```python zip_file.close() 这些步骤将实现将ZIP文件解压并将其保存到指定目录的过程。记得将路径替换为你自己的路径。