zip() ?功能是从参数的多个迭代器中选取元素组合成一个新的迭代器.顾名思义,它就是一个将对象进行打包和解包的函数.
它可以传入的参数包括;元组、列表、字典等迭代器
打包zip(iterables)
当zip函数的参数只有一个时,它将从iterable中依次取一个元素,组成一个元组.
解包zip(*iterables)
解包,zip 相反,可理解为解压,返回多维矩阵形式,有几个组元素就返回几维的.
比如,下面我是用三个列表组合起来的迭代式,那么解压后就返回三维的矩阵
zip高级用法
讲完了基本的再来说一下该函数的高级用法.高级用法离不开一个词:Pythonic,就是将代码写的更优雅美观,看起来有逼格!
① 列表推导
例如:
我们要同时遍历a、b,且要对它们进行操作,那就要放在同一个for循环内,zip函数正好合适
当然,如果你需要对下标进行操作,那么还需要加上enumerate函数
import zipfile
# 传入压缩文件zfile.zip获取相关信息
zip_file = zipfile.ZipFile('zfile.zip')
# 获取压缩文件中的内容
f_content = zip_file.namelist()
# 压缩前的大小
f_size = zip_file.getinfo('zfile/a.txt').file_size
# 压缩后的大小
c_size = zip_file.getinfo('zfile/a.txt').compress_size
ZipFile 对象有一个 namelist()方法,返回 ZIP 文件中包含的所有文件和文件夹 的字符串的列表.这些字符串可以传递给 ZipFile 对象的 getinfo()方法,返回一个关 于特定文件的 ZipInfo 对象.ZipInfo 对象有自己的属性,诸如表示字节数的 file_size 和 compress_size,它们分别表示原来文件大小和压缩后文件大小.ZipFile 对象表示 整个归档文件,而 ZipInfo 对象则保存该归档文件中每个文件的有用信息.
从 ZIP 文件中解压缩
ZipFile 对象的 extractall()方法从 ZIP 文件中解压缩所有文件和文件夹,放到当 前工作目录中.
# 解压
zip_extract = zip_file.extractall()
zip_extract.close()
运行这段代码后, example.zip 的内容将被解压缩到 C:\. 或者, 你可以向 extractall()传递的一个文件夹名称,它将文件解压缩到那个文件夹,而不是当前工作 目录.如果传递给 extractall()方法的文件夹不存在,它会被创建.例如,如果你用 exampleZip.extractall('C:\ delicious')取代?处的调用,代码就会从 example.zip 中解压 缩文件,放到新创建的 C:\delicious 文件夹中.
ZipFile 对象的 extract()方法从 ZIP 文件中解压缩单个文件.
创建和添加到 ZIP 文件
要创建你自己的压缩 ZIP 文件,必须以"写模式"打开 ZipFile 对象,即传入'w' 作为第二个参数(这类似于向 open()函数传入'w',以写模式打开一个文本文件).
如果向 ZipFile 对象的 write()方法传入一个路径,Python 就会压缩该路径所指 的文件,将它加到 ZIP 文件中.write()方法的第一个参数是一个字符串,代表要添 加的文件名.第二个参数是"压缩类型"参数,它告诉计算机使用怎样的算法来压 缩文件.可以总是将这个值设置为 zipfile.ZIP_DEFLATED(这指定了 deflate 压缩 算法,它对各种类型的数据都很有效).
zip_file = zipfile.ZipFile('new.zip','w')
# 把zfile整个目录下所有内容,压缩为new.zip文件
zip_file.write('zfile',compress_type=zipfile.ZIP_DEFLATED)
# 把c.txt文件压缩成一个压缩文件
# zip_file.write('c.txt',compress_type=zipfile.ZIP_DEFLATED)
zip_file.close()
这段代码将创建一个新的 ZIP 文件,名为 new.zip,它包含 spam.txt 压缩后的内容.
要记住,就像写入文件一样,写模式将擦除 ZIP 文件中所有原有的内容.如果 只是希望将文件添加到原有的 ZIP 文件中,就要向 zipfile.ZipFile()传入'a'作为第二 个参数,以追加模式打开 ZIP 文件.
定义:zip([iterable, ...])
zip()是Python的一个内建函数,它接受一系列可迭代的对象作为参数,将对象中对应的元素打包成一个个tuple(元组),然后返回由这些 tuples组成的list(列表).若传入参数的长度不等,则返回list的长度和参数中长度最短的对象相同.利用*号操作符,可以将list unzip(解压),看下面的例子就明白了:
对于这个并不是很常用函数,下面举几个例子说明它的用法:
* 二维矩阵变换(矩阵的行列互换)
比如我们有一个由列表描述的二维矩阵
通过python列表推导的方法,我们也能轻易完成这个任务
另外一种让人困惑的方法就是利用zip函数:
这种方法速度更快但也更难以理解,将list看成tuple解压,恰好得到我们"行列互换"的效果,再通过对每个元素应用list()函数,将tuple转换为list
* 以指定概率获取元素
这个函数有个限制,指定概率的列表必须和元素一一对应,而且和为1,否则这个函数可能不能像预想的那样工作.
稍微解释下,先利用random.uniform()函数生成一个0-1之间的随机数并复制给x,利用zip()函数将元素和他对应的概率打包成tuple,然后将每个元素的概率进行叠加,直到和大于x终止循环
对于图片,强行被定义高和宽会变形,我们希望图片被改变大小后,比例保持不变,完成对图片的压缩.
①pillow : pip install pillow -i
以上就是土嘎嘎小编为大家整理的python压缩图函数相关主题介绍,如果您觉得小编更新的文章只要能对粉丝们有用,就是我们最大的鼓励和动力,不要忘记讲本站分享给您身边的朋友哦!!