介绍
在Python 3.x中,zipfile模块提供了对ZIP(“压缩文件”)格式文件的支持,可以轻松地创建和解压ZIP文件。ZIP文件在文件传输和存档过程中非常常见,因为它们允许用户将多个文件组合到一个单独的文件中,这样就可以节省空间和便于传输。
创建ZIP文件
要在Python 3.x中创建一个ZIP文件,我们需要使用zipfile模块中的ZipFile类的实例。该类有两个必需的参数:要创建的ZIP文件的路径(使用相对或绝对路径)和模式(“w”用于写入模式)。下面是一个简单的示例,演示了如何将两个文件添加到名为“example.zip”的ZIP文件中:
import zipfile
# 创建一个ZipFile对象
with zipfile.ZipFile('example.zip', 'w') as myzip:
# 向ZIP文件中添加文件
myzip.write('file1.txt')
myzip.write('file2.txt')
在这个例子中,我们首先导入zipfile模块,然后创建一个ZipFile对象,指定创建名为“example.zip”的ZIP文件,并将模式设置为“w”(写入模式)。然后,我们使用myzip.write()方法将两个文件“file1.txt”和“file2.txt”添加到ZIP文件中。这些文件必须在同一目录中。
向ZIP文件添加目录
除了添加单个文件之外,我们也可以向ZIP文件添加目录。为此,我们可以使用zipfile.ZipFile对象的write()方法,并将目录路径作为参数传递。这将添加整个目录,包括其中的所有文件和子目录。下面是示例:
import zipfile
# 创建一个ZipFile对象
with zipfile.ZipFile('example.zip', 'w') as myzip:
myzip.write('mydir')
在这个例子中,我们向ZIP文件中添加一个名为“mydir”的目录,该目录位于当前工作目录中。
解压ZIP文件
要在Python 3.x中从ZIP文件中提取文件,我们需要使用zipfile模块中的ZipFile类的实例。我们可以使用该类的extractall()方法,它将ZIP文件中的所有文件提取到指定的目录。这里是一个简单的例子,演示了如何将名为“example.zip”的ZIP文件中的所有内容提取到名为“mydir”的目录中:
import zipfile
# 创建一个ZipFile对象
with zipfile.ZipFile('example.zip', 'r') as myzip:
# 提取所有文件到mydir目录
myzip.extractall('mydir')
在这个例子中,我们首先导入zipfile模块,然后创建一个ZipFile对象,指定将要解压缩文件名为“example.zip”的ZIP文件,并将模式设置为“r”(只读模式)。我们然后使用myzip.extractall()方法将ZIP文件中的所有文件提取到名为“mydir”的目录中。
提取单个文件
如果你只需要提取ZIP文件中的一个文件,而不是所有文件,那么你可以使用ZipFile对象的extract()方法并将文件名作为参数传递。下面是一个示例:
import zipfile
# 创建一个ZipFile对象
with zipfile.ZipFile('example.zip', 'r') as myzip:
# 提取单个文件
myzip.extract('file1.txt')
在这个例子中,我们从名为“example.zip”的ZIP文件中提取了一个名为“file1.txt”的文件。请注意,文件将提取到当前工作目录中。
加密ZIP文件
如果需要保护ZIP文件中的内容,我们可以使用ZipFile对象的setpassword()方法来设置密码。这将使ZIP文件内容加密,并且需要在运行任何操作之前提供密码。下面是一个示例:
import zipfile
# 创建一个ZipFile对象,并设置密码
with zipfile.ZipFile('example.zip', 'w') as myzip:
myzip.setpassword(b'mypassword')
# 向ZIP文件中添加文件
myzip.write('file1.txt')
在这个例子中,我们向ZIP文件中添加了一个名为“file1.txt”的文件,并设置了密码为“mypassword”。注意,密码必须是字节字符串,因此需要添加前缀“b”。
等效的解密
要解密加密的ZIP文件,我们只需在ZipFile对象的构造函数中提供正确的密码即可。下面是一个示例:
import zipfile
# 创建一个ZipFile对象,并提供密码
with zipfile.ZipFile('example.zip', 'r', pwd=b'mypassword') as myzip:
# 解密ZIP文件中的文件
myzip.extractall('mydir')
在这个例子中,我们使用与先前相同的密码“mypassword”解密ZIP文件,并将提取到名为“mydir”的目录中。
结论
Python 3.x的zipfile模块提供了方便的方式来创建和解压ZIP文件。使用这个模块,可以轻松地组合多个文件成为一个ZIP文件,也可以轻松地从ZIP文件中提取文件。并且如果你需要保护ZIP文件中的内容,你可以使用setpassword()方法设置密码对其进行加密和解密。