您的位置:

python里zip,Python中?

本文目录一览:

python zip函数

zip()函数用于将可迭代的对象作为参考,将对象中对应的元素打包成一个个远足,然后返回有这些元祖组成的列表。

zip([iterabale,....])

python中zip函数详解

a=[1,2,3,4,5,6,7,8,9]

b=[5,9,2,4,5,7,3,1,7]

c=list(zip(a,b))#打包

print(c)

输出内容:[[1,5],[2,9],[3,2],[4,4],[5,5],[6,7],[7,3],[8,1],[9,7]]

d=list(zip(*c))#解包

print(d)

输出内容:[[1,2,3,4,5,6,7,8,9],[5,9,2,4,5,7,3,1,7]]

Python打开zip文件

    Zip文件格式是通用的文档压缩标准。自1.6版本起,Python中zipfile模块能够直接处理zip文件里的数据,例如需要将对应目录或多个文件打包或压缩成zip格式,或者需要查看一个zip格式的归档文件中部分或者所有文件同时避免讲这些文件展开到磁盘上。使用ZipFile类来操作zip文件。

创建一个ZipFile对象,表示一个zip文件。

     参数file:文件的路径或者类似文件对象

     参数mode:读"r",写入"w",添加"a"

     参数compression: ZIP_STORED(无压缩),ZIP_DEFLATED(压缩,需要zlib支持)

     参数allowZip64:默认情况下报错,将其设为True,ZipFile将用ZIP64扩展进行创建文件。

下面示例演示了读取一个zip文档,将文档里所有文件解压到名为"work"的文件里。

import zipfile

if __name__ == "__main__":

    zFile = zipfile.ZipFile("F:\\txt.zip","r")

    #ZipFile.namelist():获取ZIP文档内所有文件的名称列表

    for fileM in zFile.namelist():

        zFile.extract(fileM,"F:\\work")

        zFile.close()

read(self,name,pwd=None)获取ZIP文档内文件的二进制数据

下面例子演示了使用read方法获取ZIP文档中mango.txt文件的数据,并写到copy.txt文件中

import zipfile 

if __name__ == "__main__":

    zipFile = zipfile.ZipFile('F:\\test.zip','r')

    data = zipFile.read("mango.txt")

    (lambda f,d:(f.write(d),f.close()))(open("F:\\copy.txt,'w"),data)

    zipFile.close()

write(self, filename, arcname=None, compress_type=None)将指定文件写入ZIP文档中

     参数filename:需要写入文件的路径

     参数arcname:文件写入ZIP文档后保存的文件名

     参数compress_type:压缩方法(ZIP_STORED或ZIP_DEFAULED)

下面离子演示了创建一个zip文档,将test.docx文件写入压缩文档里面。

import zipfile

if __name__ == "__main__":

    zipFile = zipfile.ZipFile("F:\\test.zip","w")

    zipFile.write("F:\\test.docx","ok.docx",zipfile.ZIP_DEFLATED)

    zipFile.close()

getinfo(name)返回一个ZipInfo类的对象。

import zipfile

if __name__ == "__main__":

    zipInfo = zipFile.getinfo(ok.docx)

    print("filename:",zipInfo.filename)

    print("date_time:",zipInfo.date_time)

常用函数

关闭归档文件,你必须在退出程序之前调用close()否则将不会写入关键记录数据。

返回一个ZipInfo对象,其中包含有关归档成员name的信息。针对一个目前并不包含于归档中的名称调用getinfo()将会引发KeyError。

   返回一个列表,其中包含每个归档成员的ZipInfo对象。如果是打开一个现有归档则这些对象的排列顺序与他们对于条目在磁盘上的实际ZIP文件中的顺序一致。

返回按名称排列的归档成员列表。

以二进制文件类对象的形式访一个归档成员。name可以是归档内某个文件的名称也可以是某个ZipInfo对象。如果包含了mode形参,则它必须为"r"(默认值)或"w"。pwd为用于解密已加密Zip文件的密码。

open()也是一个上下文 管理器,因此支持with语句:

with ZipFile('spam.zip') as myzip:

    with myzip.open('eggs.txt') as myfile:

    print(myfile.read())

如果mode为“r”则文件类对象(ZipExtFile)将只读并且提供下列方法:read(),readline(),readlines(),seek(),tell(),__iter__(),__next__()。这些对象可独立于ZipFile进行操作。

如果mode='w'则返回一个可写入的文件句柄,它将支持write()方法。当一个可写入的文件句柄被打开时,尝试读写ZIP文件中的其他文件将会引发ValueError。

当写入一个文件时,如果文件大小不能预先确定但是可能超过2GiB,可传入force_zip64=True以确保标头格式能够支持超大文件。如果文件大小可以预先确定,则在构造ZipInfo对象时应设置file_size,并将其作name形参。

从归档中提取一个成员放入当前工作目录;member必须为成员的完整名称或ZipInfo对象。成员的文件信息会尽可能精确地被提取。path指定一个要提取到的不同目录。member可以是一个文件名或ZipInfo对象。pwd是用于解密文件的密码。返回所创建的经正规化的路径(对应于目录或新文件)。

从归档中提取出所有成员放入当前工作目录。path指定一个要提取到的不同的目录。members为可选项且必须为namelist()所返回列表的一个子集。pwd是用于解密文件的密码。

警告:绝不要未经预先检验就从不可靠的源中提取归档文件。 这样有可能在  path  之外创建文件,例如某些成员具有以 "/" 开始的文件名或带有两个点号 ".." 的文件名。 此模块会尝试防止这种情况。 参见  extract()  的注释。

将归档是目录表打印到sys.stdout.

设置pwd为用于提取已加密文件的默认密码。

返回归档中文件name的字节数据。name是归档中文件的名称,或是一个ZipInfo对象。归档必须以读取或追加方式打开。pwd为用于已加密文件的密码,并且如果指定该参数则它将覆盖通过setpassword()设置的默认密码。 on a ZipFile that uses a compression method 在使用  ZIP_STORED  ,  ZIP_DEFLATED ,  ZIP_BZIP2  或  ZIP_LZMA  以外的压缩方法的 ZipFile 上调用  read()  将引发  NotImplementedError 。 如果相应的压缩模块不可用也会引发错误。

读取归档中的所有文件并检查他们的CRC和文件头。返回第一个已损坏文件的名称,在其他情况下则返回None。

将名为filename的文件写入归档,给予的归档名为arcname(默认情况下将与filename一致,但是不带驱动器盘符并会移除开头的路径分隔符)。compress_type如果给出,它将覆盖作为构造器compression形参对于新条目所给出的值。类似地,compresslevel如果给出也将覆盖构造器。归档必须使用"w","x“或"a"模式打开。

将一个文件写入归档。 内容为  data ,它可以是一个  str  或  bytes  的实例;如果是  str ,则会先使用 UTF-8 进行编码。  zinfo_or_arcname  可以是它在归档中将被给予的名称,或者是  ZipInfo  的实例。 如果它是一个实例,则至少必须给定文件名、日期和时间。 如果它是一个名称,则日期和时间会被设为当前日期和时间。 归档必须以 'w', 'x' 或 'a' 模式打开。

ZIP文件的名称

python中zip函数有哪些高级用法

zip()  功能是从参数的多个迭代器中选取元素组合成一个新的迭代器。顾名思义,它就是一个将对象进行打包和解包的函数。

它可以传入的参数包括;元组、列表、字典等迭代器

它返回一个zip对象,其内部元素为元组,一组一组的,可以转化为列表或元组,这里要强调一下,Python2和Python3中返回的zip对象有所不同。

Python3中zip()函数再不再返回list对象,但是可以通过list强行转换。(类似的函数变化还有dictionary关联的keys()、values()、items(),map(),filter())。

打包zip(iterables)

上面的代码使用的环境是Python3.6,其中list (z)操作就是强制转换。注意一个问题,a和b这两个列表是不同长短的,这时候zip函数就会匹配完最短的那个便结束。

当zip函数的参数只有一个时,它将从iterable中依次取一个元素,组成一个元组。

解包zip(*iterables)

解包,zip 相反,可理解为解压,返回多维矩阵形式,有几个组元素就返回几维的。

比如,下面我是用三个列表组合起来的迭代式,那么解压后就返回三维的矩阵

zip高级用法

讲完了基本的再来说一下该函数的高级用法。高级用法离不开一个词:Pythonic,就是将代码写的更优雅美观,看起来有逼格!

1. 列表推导

例如:

a = [1,2,3,4]

b = [5,6,7,8]

我们要同时遍历a、b,且要对它们进行操作,那就要放在同一个for循环内,zip函数正好合适

注意:如果是Python2环境中,要使用izip才能提高效率。

当然,如果你需要对下标进行操作,那么还需要加上enumerate函数

2. 使用zip创建键值对,zip方法返回的是一个元组,用它来创建键值对,简单明了。

Python实现批量压缩文件/文件夹——zipfile

zipfile是python里用来做zip格式编码的压缩和解压缩的,由于是很常见的zip格式,所以这个模块使用频率也是比较高的,

在这里对zipfile的使用方法做一些记录。即方便自己也方便别人。

Python zipfile模块用来做zip格式编码的压缩和解压缩的,要进行相关操作,首先需要实例化一个 ZipFile 对象。ZipFile 接受一个字符串格式压缩包名称作为它的必选参数,第二个参数为可选参数,表示打开模式,类似于文件操作,有r/w/a三种模式,分别代表读、写、添加,默认为r,即读模式。

zipfile里有两个非常重要的class, 分别是ZipFile和ZipInfo, 在绝大多数的情况下,我们只需要使用这两个class就可以了。ZipFile是主要的类,用来创建和读取zip文件而ZipInfo是存储的zip文件的每个文件的信息的。

ZipFile还提供了如下常用的方法和属性:

获取zip文档内指定文件的信息。返回一个zipfile.ZipInfo对象,它包括文件的详细信息。

获取zip文档内所有文件的信息,返回一个zipfile.ZipInfo的列表。

获取zip文档内所有文件的名称列表。

将zip文档内的指定文件解压到当前目录。参数member指定要解压的文件名称或对应的ZipInfo对象;参数path指定了解析文件保存的文件夹;

解压zip文档中的所有文件到当前目录。参数members的默认值为zip文档内的所有文件名称列表,也可以自己设置,选择要解压的文件名称。

将zip文档内的信息打印到控制台上。

设置zip文档的密码。

python zip函数的用法

定义:zip([iterable, ...])

zip()是Python的一个内建函数,它接受一系列可迭代的对象作为参数,将对象中对应的元素打包成一个个tuple(元组),然后返回由这些 tuples组成的list(列表)。若传入参数的长度不等,则返回list的长度和参数中长度最短的对象相同。利用*号操作符,可以将list unzip(解压),看下面的例子就明白了:

1 2 3 4 5 6 7 8 9

a = [1,2,3] b = [4,5,6] c = [4,5,6,7,8] zipped = zip(a,b) [(1, 4), (2, 5), (3, 6)] zip(a,c) [(1, 4), (2, 5), (3, 6)] zip(*zipped) [(1, 2, 3), (4, 5, 6)]

对于这个并不是很常用函数,下面举几个例子说明它的用法:

* 二维矩阵变换(矩阵的行列互换)

比如我们有一个由列表描述的二维矩阵

a = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]

通过python列表推导的方法,我们也能轻易完成这个任务

1 2

print [ [row[col] for row in a] for col in range(len(a[0]))] [[1, 4, 7], [2, 5, 8], [3, 6, 9]]

另外一种让人困惑的方法就是利用zip函数:

1 2 3 4 5

a = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] zip(*a) [(1, 4, 7), (2, 5, 8), (3, 6, 9)] map(list,zip(*a)) [[1, 4, 7], [2, 5, 8], [3, 6, 9]]

这种方法速度更快但也更难以理解,将list看成tuple解压,恰好得到我们“行列互换”的效果,再通过对每个元素应用list()函数,将tuple转换为list

* 以指定概率获取元素

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27

import random def random_pick(seq,probabilities): x = random.uniform(0, 1) cumulative_probability = 0.0 for item, item_probability in zip(seq, probabilities): cumulative_probability += item_probability if x cumulative_probability: break return item for i in range(15): random_pick("abc",[0.1,0.3,0.6]) 'c' 'b' 'c' 'c' 'a' 'b' 'c' 'c' 'c' 'a' 'b' 'b' 'c' 'a' 'c'

这个函数有个限制,指定概率的列表必须和元素一一对应,而且和为1,否则这个函数可能不能像预想的那样工作。

稍微解释下,先利用random.uniform()函数生成一个0-1之间的随机数并复制给x,利用zip()函数将元素和他对应的概率打包成tuple,然后将每个元素的概率进行叠加,直到和大于x终止循环

这样,”a”被选中的概率就是x取值位于0-0.1的概率,同理”b”为0.1-0.4,”c”为0.4-1.0,假设x是在0-1之间平均取值的,显然我们的目的已经达到