Python的zipfile压缩文件夹实现

介绍

在Python中,我们可以使用zipfile库来对文件夹进行压缩。这个库提供了一些简单易用的方法,使得压缩文件夹变得非常简单。在本文中,我将向你介绍如何使用zipfile库来压缩文件夹,并提供一个详细的步骤指导。

整体流程

下面是整个压缩文件夹的流程,你可以先看一下,然后我们会逐步解释每个步骤。

journey
    title Python的zipfile压缩文件夹实现流程
    section 准备工作
        step 创建一个新的zip文件
    section 遍历文件夹
        step 遍历文件夹中的所有文件和子文件夹
    section 添加文件到zip文件
        step 依次将文件或文件夹添加到zip文件中
    section 压缩并关闭zip文件
        step 压缩zip文件并关闭

准备工作

在开始压缩文件夹之前,我们需要导入zipfile库,并创建一个新的zip文件。你可以使用下面的代码来完成这个步骤:

import zipfile

# 创建一个新的zip文件
zip_file = zipfile.ZipFile('path/to/new_zip_file.zip', 'w')

这段代码导入了zipfile库,并使用ZipFile类创建了一个新的zip文件。ZipFile类的第一个参数是要创建的zip文件的路径和名称,第二个参数是打开zip文件的模式, 'w'表示写入模式。你可以根据自己的需求修改zip文件的路径和名称。

遍历文件夹

在压缩文件夹之前,我们需要遍历文件夹中的所有文件和子文件夹。这样我们才能将它们添加到zip文件中。你可以使用下面的代码来遍历文件夹:

import os

def get_all_files(folder_path):
    all_files = []
    for root, dirs, files in os.walk(folder_path):
        for file in files:
            file_path = os.path.join(root, file)
            all_files.append(file_path)
    return all_files

folder_path = 'path/to/folder'
files = get_all_files(folder_path)

这段代码使用了os.walk()函数来遍历文件夹中的所有文件和子文件夹。os.walk()函数返回一个三元组,包含当前文件夹的路径、当前文件夹中的子文件夹列表和当前文件夹中的文件列表。我们使用一个循环来遍历所有文件,将它们的路径存储在一个列表中。

添加文件到zip文件

在遍历文件夹之后,我们可以将文件和子文件夹添加到zip文件中了。你可以使用下面的代码将文件添加到zip文件中:

for file in files:
    zip_file.write(file, os.path.relpath(file, folder_path))

这段代码使用了write()方法将文件添加到zip文件中。write()方法的第一个参数是要添加的文件的路径,第二个参数是文件在zip文件中的相对路径。我们使用os.relpath()函数来计算文件在zip文件中的相对路径。

压缩并关闭zip文件

在添加文件到zip文件之后,我们需要压缩zip文件并关闭它。你可以使用下面的代码来完成这个步骤:

zip_file.close()

这段代码使用了close()方法来压缩并关闭zip文件。这个方法会将所有的文件写入zip文件,并将其保存到磁盘上。

完整代码示例

import zipfile
import os

def get_all_files(folder_path):
    all_files = []
    for root, dirs, files in os.walk(folder_path):
        for file in files:
            file_path = os.path.join(root, file)
            all_files.append(file_path)
    return all_files

# 创建一个新的zip文件
zip_file = zipfile.ZipFile('path/to/new_zip_file.zip', 'w')

# 遍历文件夹
folder_path = 'path/to/folder'
files = get_all_files(folder_path)

# 添加文件到zip文件
for file in files:
    zip_file.write(file, os.path.relpath(file, folder_path))

# 压缩并关闭zip文件
zip_file