ZIP文件格式是一种常用的归档和压缩标准。此模块提供了创建,读取,写入,追加和列出ZIP文件的工具。此模块的任何高级用法都需要了解PKZIP应用说明中定义的格式。
此模块目前不处理多磁盘ZIP文件。它可以处理使用ZIP64扩展名的ZIP文件(即大小超过4 GB的ZIP文件)。它支持在ZIP压缩文件中解密加密文件,但它目前不能创建加密文件。解密过程非常缓慢,因为它在本地Python而不是C中实现。
该模块定义了以下项目:
exception zipfile.BadZipfile
错误的ZIP文件(旧名称:)提出的错误zipfile.error。
exception zipfile.LargeZipFile
ZIP文件需要ZIP64功能但尚未启用时引发的错误。
class zipfile.ZipFile
用于读写ZIP文件的类。有关构造函数的详细信息,请参见ZipFile Objects部分。
class zipfile.PyZipFile
用于创建包含Python库的ZIP存档的类。
class zipfile.ZipInfo([filename[, date_time]])
用于表示关于档案成员的信息的类。这个类的实例由对象的方法getinfo()和infolist()方法返回ZipFile。该zipfile模块的大多数用户不需要创建这些,但只能使用由该模块创建的那些用户。文件名应该是档案成员的全名,并且date_time应该是包含六个字段的元组,其描述对文件的最后修改的时间; 这些字段在ZipInfo对象中进行了描述。
zipfile.is_zipfile(filename)
返回True如果文件名是基于它的幻数有效的ZIP文件,否则回报False。文件名也可以是文件或类似文件的对象。
在版本2.7中更改:支持文件和文件类对象。
zipfile.ZIP_STORED
未压缩的归档成员的数字常量。
zipfile.ZIP_DEFLATED
常用ZIP压缩方法的数字常量。这需要zlib模块。目前不支持其他压缩方法。
1. ZipFile对象
class zipfile.ZipFile(file[, mode[, compression[, allowZip64]]])
打开一个ZIP文件,其中文件可以是文件路径(字符串)或文件类型的对象。该模式参数应该是'r'读取现有的文件,'w'以截断并写入一个新的文件,或'a'将追加到现有文件。如果模式是,'a'并且文件引用了现有的ZIP文件,则会向其中添加其他文件。如果文件没有引用ZIP文件,则新的ZIP归档文件被追加到文件中。这是为了将ZIP压缩文件添加到其他文件(如python.exe)。
在版本2.6中更改:如果模式是,a并且该文件根本不存在,则会创建它。
压缩是编写压缩文件时使用的ZIP压缩方法,应该是ZIP_STORED或ZIP_DEFLATED; 无法识别的值会导致RuntimeError提高。如果ZIP_DEFLATED被指定,但zlib模块不可用,RuntimeError也会引发。默认是ZIP_STORED。如果allowZip64是Truezipfile,则会在zip文件大于2 GB时创建使用ZIP64扩展名的ZIP文件。如果它是假的(默认)zipfile会在ZIP文件需要ZIP64扩展时引发异常。默认情况下禁用ZIP64扩展,因为Unix上的默认zip和unzip命令(InfoZIP实用程序)不支持这些扩展。
改变在2.7.1版本:如果文件与模式创建'a'或'w'再closed不添加任何文件到归档,一个空归档适当的ZIP结构将被写入该文件。
ZipFile也是一个上下文管理器,因此支持该with语句。在这个例子中,myzip在with语句套件完成后关闭- 即使发生异常:
with ZipFile('spam.zip', 'w') as myzip:
myzip.write('eggs.txt')
复制
2.7版新增功能:增加了ZipFile用作上下文管理器的功能。
ZipFile.close()
关闭档案文件。您必须close()在退出程序之前拨打电话,否则不会写入重要记录。
ZipFile.getinfo(name)
ZipInfo用关于存档成员名称的信息返回一个对象。调用getinfo()存档中当前不包含的名称将引发一个KeyError。
ZipFile.infolist()
返回包含ZipInfo每个档案成员的对象的列表。如果打开了现有的存档,则这些对象与磁盘上实际ZIP文件中的条目顺序相同。
ZipFile.namelist()
按名称返回存档成员列表。
ZipFile.open(name[, mode[, pwd]])
从存档中提取成员为文件类对象(ZipExtFile)。name是档案中文件的名称或ZipInfo对象。所述模式参数,如果包括的话,必须是下列之一:'r'(默认值),'U'或'rU'。在只读对象中选择'U'或'rU'将启用通用换行支持。pwd是用于加密文件的密码。调用open()一个封闭的ZipFile将引发一个RuntimeError。
注释
的类文件对象是只读的,并且提供了以下的方法:read(),readline(),readlines(),__iter__(),next()。
注释
如果通过传入类文件对象作为构造函数的第一个参数来创建ZipFile,那么通过open()共享ZipFile的文件指针返回的对象。在这些情况下,open()在ZipFile对象上执行任何其他操作之后,不应该使用返回的对象。如果ZipFile是通过传入一个字符串(文件名)作为构造函数的第一个参数来open()创建的,那么将创建一个新的文件对象,该对象将由ZipExtFile保存,允许它独立于ZipFile进行操作。
注释
open(),read()和extract()方法可利用一个文件名或ZipInfo对象。尝试阅读包含具有重复名称的成员的ZIP文件时,您会明白这一点。
2.6版本中的新功能。
ZipFile.extract(member[, path[, pwd]])
将存档中的成员提取到当前工作目录; 成员必须是其全名或ZipInfo对象)。其文件信息尽可能准确地提取。路径指定要提取到的不同目录。成员可以是文件名或ZipInfo对象。pwd是用于加密文件的密码。
返回创建的规范化路径(目录或新文件)。
2.6版本中的新功能。
注释
如果成员的文件名是绝对路径,驱动/ UNC SharePoint和领导(回)斜线将被剥离,如:///foo/bar成为foo/bar在Unix,并C:\foo\bar成为foo\bar在Windows上。".."成员文件名中的所有组件都将被删除,例如:../../foo../../ba..r成为foo../ba..r。在Windows非法字符(:,<,>,|,",?,并*用下划线代替)( _)。
ZipFile.extractall([path[, members[, pwd]]])
将存档中的所有成员提取到当前工作目录。路径指定要提取到的不同目录。成员是可选的,并且必须是返回列表的子集namelist()。pwd是用于加密文件的密码。
警告
切勿在未经事先检查的情况下从不受信任的来源提取档案。有可能文件是在路径之外创建的,例如具有"/"以两个点开头的绝对文件名或具有两个点的文件名的成员".."。
在2.7.4版本中进行了更改:zipfile模块试图阻止该问题。见extract()注。
2.6版本中的新功能。
ZipFile.printdir()
打印存档的目录到sys.stdout。
ZipFile.setpassword(pwd)
将pwd设置为默认密码以提取加密文件。
2.6版本中的新功能。
ZipFile.read(name[, pwd])
返回档案中文件名称的字节。name是档案中文件的名称或ZipInfo对象。档案必须打开才能阅读或追加。pwd是用于加密文件的密码,如果指定,它将覆盖使用默认密码设置setpassword()。调用read()一个封闭的ZipFile将引发一个RuntimeError。
在版本2.6中更改:pwd已添加,名称现在可以是ZipInfo对象。
ZipFile.testzip()
阅读档案中的所有文件,并检查它们的CRC和文件头。返回第一个错误文件的名称,否则返回None。调用testzip()一个封闭的ZipFile将引发一个RuntimeError。
ZipFile.write(filename[, arcname[, compress_type]])
写命名的文件的文件名到归档,给它存档名称arcname(默认情况下,这将是相同的文件名,但没有一个驱动器号和与领先的路径分隔符删除)。如果给定,compress_type将为新条目覆盖为压缩参数给构造函数指定的值。归档文件必须以模式打开,'w'或者'a'- 调用write()使用模式创建的ZipFile 'r'将引发一个RuntimeError。调用write()一个封闭的ZipFile将引发一个RuntimeError。
注释
ZIP文件没有官方文件名编码。如果你有unicode文件名,你必须在将它们传递给你所需的编码之前将它们转换为字节串write()。WinZip将所有文件名解释为在CP437中编码,也称为DOS Latin。
注释
档案名称应该与档案根目录相关,也就是说,它们不应该以路径分隔符开头。
注释
如果arcname(或者filename如果arcname未给出)包含空字节,则归档文件的名称将在空字节处截断。
ZipFile.writestr(zinfo_or_arcname, bytes[, compress_type])
将字符串字节写入存档; zinfo_or_arcname是它将在档案中给出的文件名称,或者是一个ZipInfo实例。如果它是一个实例,至少必须给出文件名,日期和时间。如果是名称,则日期和时间设置为当前日期和时间。档案必须用模式打开'w'或'a'- 调用writestr()一个用模式创建的ZipFile 'r'会引发一个RuntimeError。调用writestr()一个封闭的ZipFile将引发一个RuntimeError。
如果给定,compress_type将覆盖为新条目的构造函数提供的压缩参数的值,或覆盖zinfo_or_arcname(如果是ZipInfo实例)的值。
注释
当将ZipInfo实例作为zinfo_or_arcname参数传递时,所使用的压缩方法将是给定实例的compress_type成员中指定的压缩方法ZipInfo。默认情况下,ZipInfo构造函数将此成员设置为ZIP_STORED。
在版本2.7中更改:compress_type参数。
以下数据属性也可用:
ZipFile.debug
要使用的调试输出的级别。这可以从0(默认,无输出)到3(最多输出)设置。调试信息被写入sys.stdout。
ZipFile.comment
与ZIP文件关联的评论文本。如果为ZipFile使用模式'a'或'w'创建的实例分配注释,这应该是不超过65535字节的字符串。比此更长的评论在close()被调用时会在书面存档中被截断。
2. PyZipFile对象
该PyZipFile构造函数将相同的参数ZipFile构造函数。实例除了那些ZipFile对象外还有一种方法。
PyZipFile.writepy(pathname[, basename])
搜索文件*.py并将相应的文件添加到存档。*.pyo如果可用的话,相应的文件是一个文件,否则是一个*.pyc文件,必要时编译。如果路径名是一个文件,则文件名必须以.py,并且只有(对应的*.py[co])文件被添加到顶层(无路径信息)。如果路径名是不是结束一个文件.py,一个RuntimeError将提高。如果它是一个目录,并且该目录不是一个包目录,则所有文件*.py[co]都将添加到顶层。如果该目录是一个包目录,则所有*.py[co]这些目录都将作为文件路径添加到包名下,如果有任何子目录是包目录,则所有这些都将递归添加。基本名仅供内部使用。该writepy()方法使用以下文件名进行归档:
string.pyc # Top level name
test/__init__.pyc # Package directory
test/test_support.pyc # Module test.test_support
test/bogus/__init__.pyc # Subpackage directory
test/bogus/myfile.pyc # Submodule test.bogus.myfile
复制
3. ZipInfo对象
ZipInfo类的实例由对象的方法getinfo()和infolist()方法返回ZipFile。每个对象存储有关ZIP存档的单个成员的信息。
实例具有以下属性:
ZipInfo.filename
归档文件的名称。
ZipInfo.date_time
上次修改归档成员的时间和日期。这是一个包含六个值的元组:
指数 | 值 |
---|---|
0 | 年份(> = 1980年) |
1 | 月份(基于单位) |
2 | 一个月中的日(基于一) |
3 | 小时(从零开始) |
4 | 分钟(从零开始) |
5 | 秒(零基) |
注意
1980年以前,ZIP文件格式不支持时间戳。
ZipInfo.compress_type
归档成员的压缩类型。
ZipInfo.comment
评论个人档案成员。
ZipInfo.extra
扩展字段数据。在PKZIP应用笔记包含包含在该字符串数据的内部结构的一些意见。
ZipInfo.create_system
创建ZIP档案的系统。
ZipInfo.create_version
创建ZIP压缩文件的PKZIP版本。
ZipInfo.extract_version
PKZIP版本需要提取归档。
ZipInfo.reserved
必须为零。
ZipInfo.flag_bits
ZIP标志位。
ZipInfo.volume
文件头的卷号。
ZipInfo.internal_attr
内部属性。
ZipInfo.external_attr
外部文件属性。
ZipInfo.header_offset
字节偏移到文件头。
ZipInfo.CRC
未压缩文件的CRC-32。
ZipInfo.compress_size
压缩数据的大小。
ZipInfo.file_size
未压缩文件的大小。
4.命令行界面
该zipfile模块提供了一个简单的命令行界面来与ZIP档案进行交互。
如果您想创建一个新的ZIP存档,请在-c选项后指定其名称,然后列出应包含的文件名:
$ python -m zipfile -c monty.zip spam.txt eggs.txt
复制
传递一个目录也是可以接受的:
$ python -m zipfile -c monty.zip life-of-brian_1979/
复制
如果要将ZIP压缩文件解压缩到指定的目录中,请使用以下-e选项:
$ python -m zipfile -e monty.zip target-dir/
复制
有关ZIP归档文件的列表,请使用以下-l选项:
$ python -m zipfile -l monty.zip
复制
4.1.命令行选项
-l <zipfile>
列出zipfile文件。
-c <zipfile> <source1> ... <sourceN>
从源文件创建zipfile。
-e <zipfile> <output_dir>
将zipfile解压缩到目标目录中。
-t <zipfile>
纠错
测试zip文件是否有效。
网站建设开发|APP设计开发|小程序建设开发