非常教程

Python参考手册

数据压缩 | Data Compression

zipfile

1.6版新增功能

源代码: Lib / zipfile.py

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_STOREDZIP_DEFLATED; 无法识别的值会导致RuntimeError提高。如果ZIP_DEFLATED被指定,但zlib模块不可用,RuntimeError也会引发。默认是ZIP_STORED。如果allowZip64Truezipfile,则会在zip文件大于2 GB时创建使用ZIP64扩展名的ZIP文件。如果它是假的(默认)zipfile会在ZIP文件需要ZIP64扩展时引发异常。默认情况下禁用ZIP64扩展,因为Unix上的默认zipunzip命令(InfoZIP实用程序)不支持这些扩展。

改变在2.7.1版本:如果文件与模式创建'a''w'closed不添加任何文件到归档,一个空归档适当的ZIP结构将被写入该文件。

ZipFile也是一个上下文管理器,因此支持该with语句。在这个例子中,myzipwith语句套件完成后关闭- 即使发生异常:

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文件是否有效。

数据压缩 | Data Compression相关

Python

Python 是一种面向对象的解释型计算机程序设计语言,由荷兰人 Guido van Rossum 于1989年发明,第一个公开发行版发行于1991年。 Python 是纯粹的自由软件, 源代码和解释器 CPython 遵循 GPL 协议。Python 语法简洁清晰,特色之一是强制用空白符( white space )作为语句缩进。

主页 https://www.python.org/
源码 https://github.com/python/cpython
版本 2.7
发布版本 2.7.13

Python目录

1.内置常量 | Built-in Constants
2.内置例外 | Built-in Exceptions
3.内置函数 | Built-in Functions
4.内置类型 | Built-in Types
5.编译器 | Compiler
6.加密 | Cryptography
7.数据压缩 | Data Compression
8.数据持久性 | Data Persistence
9.数据类型 | Data Types
10.调试和分析 | Debugging & Profiling
11.开发工具 | Development Tools
12.文件和目录访问 | File & Directory Access
13.文件格式 | File Formats
14.构架 | Frameworks
15.输入 | Importing
16.输入/输出 | Input/ouput
17.国际化 | Internationalization
18.网络 | Internet
19.网络数据 | Internet Data
20.翻译 | Interpreters
21.语言 | Language
22.记录 | Logging
23.Mac OS
24.MS Windows
25.多媒体 | Multimedia
26.联网 | Networking
27.数字与数学 | Numeric & Mathematical
28.操作系统 | Operating System
29.可选操作系统 | Optional Operating System
30.限制执行 | Restricted Execution
31.运行 | Runtime
32.SGI IRIX
33.软件包装与分销 | Software Packaging & Distribution
34.字符串 | String
35.结构化标记 | Structured Markup
36.Tk
37.Unix
38.Python 简介
39.Python pass 语句
40.Python 循环嵌套
41.Python 运算符
42.Python log10() 函数
43.Python log() 函数
44.Python floor() 函数
45.Python fabs() 函数
46.Python exp() 函数
47.Python cmp() 函数
48.Python ceil() 函数
49.Python abs() 函数
50.Python Number(数字)
51.Python pow() 函数
52.Python modf() 函数
53.Python min() 函数
54.Python max() 函数
55.Python asin() 函数
56.Python acos() 函数
57.Python uniform() 函数
58.Python shuffle() 函数
59.Python seed() 函数
60.Python random() 函数
61.Python randrange() 函数
62.Python choice() 函数
63.Python sqrt() 函数
64.Python round() 函数
65.Python radians() 函数
66.Python degrees() 函数
67.Python tan() 函数
68.Python sin() 函数
69.Python hypot() 函数
70.Python cos() 函数
71.Python atan2() 函数
72.Python atan() 函数
73.Python 元组
74.Python 列表(List)
75.Python 字符串
76.Python 字典(Dictionary)
77.Python 日期和时间
78.Python 函数
79.Python 模块
80.Python capitalize()方法
81.Python center()方法
82.Python count() 方法
83.Python expandtabs()方法
84.Python endswith()方法
85.Python encode()方法
86.Python decode()方法
87.Python find()方法
88.Python index()方法
89.Python 异常处理
90.Python isspace()方法
91.Python isnumeric()方法
92.Python islower()方法
93.Python isdigit()方法
94.Python isalpha()方法
95.Python isalnum()方法
96.Python isupper()方法
97.Python istitle()方法
98.Python min()方法
99.Python max()方法
100.Python maketrans()方法