小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。
压缩包也是我们平时工作中经常要接触到的文件格式,压缩文件后缀名通常有 .zip、.rar、.7z 等等。Python 中也有专门用来操作压缩包文件的第三方模块 zipfile。听这个名字就知道是用来操作压缩包文件的了,这个第三方模块也是我们本节课的重点,下面我们就一起来看一下。
1. zipfile 模块介绍
zip 文件格式是通用的文档压缩标准,在 ziplib 模块中,提供 ZipFile 类操作 zip 文件,如创建、读取、写入、附加、显示压缩文件等操作。
1.1 安装
zipfile 是 Python 的第三方库,使用前需要通过以下命令进行安装:
pip install zipfile
1.2 使用步骤
步骤 1:导入 zipfile 模块
import zipfile
步骤 2:实例化 zipfile 对象
z = zipfile.ZipFile(file, mode='r')
打开或者新建一个 zip 文件对象,第一个参数为 file 文件地址,第二个参数为打开模式,当模式参数是 ‘r’ 表示读取现有的文件,为 ‘w’ 表示覆盖或写入一个新的文件,为 ‘a’ 表示将追加到现有文件。
步骤 3:进行压缩文件操作
通过 zipfile 模块提供的方法对压缩文件进行创建、读取、解压等操作。
步骤 4:关闭压缩文件
z = zipfile.ZipFile(file, mode='r')
...省略部分代码
z.close()
注意:zipfile 在使用后,必须在退出程序之前调用 close () 方法否则将不会写入关键记录数据。
2. 使用 zipfile 模块进行压缩与解压缩
现在 D:\code 目录已有 code.zip,内容如下图所示。
接下来通过 zipfile 模块对压缩文件进行操作,zipfile 模块操作压缩文件常用方法见下表。
| 方法名 | 描述 |
|---|---|
| namelist() | 返回 ZIP 文件内所有成员名字列表 |
| write() | 添加文件到压缩包内 |
| extract(member[, path[, pwd]]) | 解压单个文件,参数 members 表示 zipfile 对象中某个文件名,path 为解压到的目的路径,默认是压缩包所在路径,pwd 为压缩包密码,默认无密码 |
| extractall([path[, members[, pwd]]]) | 解压所有文件,参数 path 为解压到的目的路径,默认是压缩包所在路径,members 默认值是压缩包文件中所有文件名称列表,也可以另外指定,pwd 为压缩包密码,默认无密码 |
下面来具体看下每个方法的使用:
- namelist () 使用:
import zipfile, os
zipFile = zipfile.ZipFile(os.path.join(os.getcwd(), 'code.zip'))
print(zipFile.namelist())
#输出: ['code/', 'code/index.py', 'code/newimage/', 'code/writeppt.py', 'code/writeword.py']
代码解释:namelist () 方法获取压缩包中所有文件的名字,并组成列表返回。首先通过 ZipFile 实例化 zip 文件对象,其中压缩文件这里通过 OS 模块的 join 方法进行拼接,返回一个绝对路径。通过 namelist () 方法打印输出:
['code/', 'code/index.py', 'code/newimage/', 'code/writeppt.py', 'code/writeword.py']
- write () 使用:
import zipfile, os
zipFile = zipfile.ZipFile(os.path.join(os.getcwd(), 'code.zip'),'a')
zipFile.write("test.txt")
print(zipFile.namelist())
#输出: ['code/', 'code/index.py', 'code/newimage/', 'code/writeppt.py', 'code/writeword.py','code/test.txt']
代码解释:write () 方法为添加文件到压缩文件,在 D:\code 目录下,创建 test.txt 文件,通过 wirte () 方法添加到现有压缩文件 code.zip 中,执行完成后,通过 namelist () 方法重写打印压缩文件中所有成员名字列表,输出 ['code/', 'code/index.py', 'code/newimage/', 'code/writeppt.py', 'code/writeword.py','code/test.txt']。上述代码中需要注意:向压缩文件中写入内容时,注意修改 zipFile 实例化处的模式,默认为 “r”,表示只读,不可以写入,设置为 “w” 后可以写入,但会覆盖原有压缩文件中内容,如果想要追加,设置为 “a” 即可。
- extract () 使用:
import zipfile, os
zipFile = zipfile.ZipFile(os.path.join(os.getcwd(), 'code.zip'))
for file in zipFile.namelist():
zipFile.extract(file)
zipFile.close()
代码解释:extract () 方法为单个压缩文件解压,代码中结合 namelist () 方法将 D:\code\code.zip 进行解压缩操作,解压后效果如下图所示。
- extractall () 使用:
import zipfile, os
zipFile = zipfile.ZipFile(os.path.join(os.getcwd(), 'code.zip'))
zipFile.extractall()
zipFile.close()
代码解释:extractall () 方法为解压 zip 文档中的所有文件到指定目录,默认为压缩包所在路径,即当前目录。代码执行完成后,效果同 extract () 结合 namelist () 方法进行解压操作一样。