如何使用 Python 将文件添加到 zip 文件中?


在充满活力的计算机编程世界中,一项必不可少的技能是能够管理文件和档案。ZIP 文件是一种需求量很大的归档类型,它使数据压缩和存储变得简单。Python 以其健壮性和适应性而闻名,它为开发人员提供了强大的模块,以便高效地处理 ZIP 文件。Python 可以轻松处理将文件添加到现有 ZIP 存档的常规过程。在这篇深入的文章中,我们将探讨如何使用 Python 将文件添加到 ZIP 存档中。为了解释这些概念,我们将逐步引导您完成这些概念,并提供一些真实的代码示例。

了解 ZIP 文件和 Python 的 zipfile 模块

在继续学习代码示例之前,让我们花一些时间了解 ZIP 文件的基础知识以及用于管理它们的 Python 模块。ZIP 归档格式可以将一个或多个文件压缩到单个文件中;这使得共享和保存数据变得更容易。Python 的标准库中的 zipfile 模块提供了与 ZIP 文件进行高效交互的必要资源。

zipfile 模块可以管理新的 ZIP 存档以及对现有 ZIP 存档的修改。本教程将重点介绍如何将文件添加到已存在的 ZIP 存档中,这在您希望更新或扩展存档内容时特别有用。

将单个文件添加到 ZIP 存档

让我们从一个简单的示例开始,说明如何将单个文件添加到现有的 ZIP 包中。在本例中,我们有一个文件,我们希望将其添加到已存在的 ZIP 存档中。

示例

在这里,我们继续定义函数 add_single_file_to_zip,它接受当前 ZIP 存档的路径和要添加的文件作为参数。使用 zipfile,我们可以打开 ZIP 存档。使用追加模式 ('a') 的 ZipFile() 来启用存档修改。然后,使用 write() 函数将请求的文件添加到 ZIP 存档中。

import zipfile

def add_single_file_to_zip(zip_file_path, file_to_add):
    with zipfile.ZipFile(zip_file_path, 'a') as zip_ref:
        zip_ref.write(file_to_add)

# Example usage
zip_file_path = 'existing_archive.zip'
file_to_add = 'file_to_include.txt'
add_single_file_to_zip(zip_file_path, file_to_add)

将多个文件添加到 ZIP 存档

在各种情况下,我们可能希望快速将多个文件添加到已存在的 ZIP 包中。为此,可以提供一个需要包含的文件列表。让我们研究如何做到这一点

示例

此代码示例继续定义方法 add_multiple_files_to_zip,它将要添加的文件列表以及已存在的 ZIP 存档的路径作为参数。我们使用追加模式 ('a') 打开 ZIP 存档,然后使用循环遍历文件列表。我们使用 write() 函数将列表中的每个文件包含在 ZIP 存档中。

import zipfile

def add_multiple_files_to_zip(zip_file_path, files_to_add):
    with zipfile.ZipFile(zip_file_path, 'a') as zip_ref:
        for file in files_to_add:
            zip_ref.write(file)

# Example usage
zip_file_path = 'existing_archive.zip'
files_to_add = ['file1.txt', 'file2.txt', 'file3.txt']
add_multiple_files_to_zip(zip_file_path, files_to_add)

添加具有自定义目录结构的文件

在其他时候,我们可能希望在将文件包含在 ZIP 存档中时保持目录结构完整。这可确保文件在存档中的正确目录中定位。

示例

在此示例中,我们声明一个名为 add_files_with_structure_to_zip 的函数,它将要添加的文件列表以及已存在的 ZIP 存档的位置作为参数。我们使用追加模式 ('a') 打开 ZIP 存档,然后使用循环遍历文件列表。

我们使用 os.path.join() 函数构建每个文件的所需存档路径,同时保持目录结构。我们在 write() 方法的 arcname 参数中设置文件将在 Zip 存档中放置的路径。

import zipfile
import os

def add_files_with_structure_to_zip(zip_file_path, files_to_add):
    with zipfile.ZipFile(zip_file_path, 'a') as zip_ref:
        for file in files_to_add:
            archive_path = os.path.join('custom_directory', file)
            zip_ref.write(file, arcname=archive_path)

# Example usage
zip_file_path = 'existing_archive.zip'
files_to_add = ['data/file1.txt', 'images/file2.jpg', 'documents/file3.pdf']
add_files_with_structure_to_zip(zip_file_path, files_to_add)

添加带有前缀的文件

有时,我们可能希望根据前缀或常见的命名模式将文件包含在 ZIP 存档中。在处理具有共享特征的文件时,这非常有用。让我们看看如何做到这一点

示例

在此代码片段中,我们定义了一个名为 add_files_with_prefix_to_zip 的函数,它接受已存在的 ZIP 存档的路径、应添加的文件列表和前缀作为参数。我们使用追加模式 ('a') 打开 ZIP 存档,然后使用循环遍历文件列表。

在将文件添加到文件列表之前,我们使用 startswith() 函数确定每个文件的名称是否以请求的前缀开头。如果确实如此,我们使用 write() 函数将其添加到 ZIP 存档中。由于 arcname 选项设置为文件的基名称,因此文件将添加到存档中,没有任何额外的目录结构。

import zipfile
import os

def add_files_with_prefix_to_zip(zip_file_path, files_to_add, prefix):
    with zipfile.ZipFile(zip_file_path, 'a') as zip_ref:
        for file in files_to_add:
            if file.startswith(prefix):
                zip_ref.write(file, arcname=os.path.basename(file))

# Example usage
zip_file_path = 'existing_archive.zip'
files_to_add = ['data_file1.txt', 'data_file2.txt', 'images_file.jpg', 'documents_file.pdf']
prefix = 'data_'
add_files_with_prefix_to_zip(zip_file_path, files_to_add, prefix)

添加带有自定义过滤器函数的文件

如果我们有更复杂的要求并且需要将文件添加到 ZIP 存档中怎么办?这可以通过使用唯一的过滤器函数来完成。请参阅如何将其付诸实践

示例

在此示例中,我们构造了一个名为“custom_filter_function()”的特殊过滤器函数,它接受文件作为输入,并根据特定条件返回“True”或“False”。在本例中,自定义条件的具体要求是“.txt”扩展名和大于 1024 字节的文件大小。“add_files_with_custom_filter()”方法接收当前 ZIP 存档的位置、要添加的文件列表和自定义过滤器函数作为参数。然后,它对列表中的每个文件使用自定义过滤器函数,如果返回 True,则将该项添加到 ZIP 存档中。

import zipfile
import os

def custom_filter_function(file):
    # Your custom condition here
    return file.endswith('.txt') and os.path.getsize(file) > 1024

def add_files_with_custom_filter(zip_file_path, files_to_add, filter_func):
    with zipfile.ZipFile(zip_file_path, 'a') as zip_ref:
        for file in files_to_add:
            if filter_func(file):
                zip_ref.write(file, arcname=os.path.basename(file))

# Example usage with the custom_filter_function
zip_file_path = 'existing_archive.zip'
files_to_add = ['file1.txt', 'file2.txt', 'file3.jpg', 'file4.txt']
add_files_with_custom_filter(zip_file_path, files_to_add, custom_filter_function)

在这篇深入的文章中,我们探讨了如何使用 Python 的灵活“zipfile”模块将文件添加到 ZIP 存档中。我们首先了解了 ZIP 文件的概念以及“zipfile”模块的基础知识。

然后,我们包含了一些真实的代码示例,涵盖了各种情况,包括添加单个文件、多个文件、维护目录层次结构、添加带有前缀的文件,甚至根据某些筛选条件添加文件。

通过了解“zipfile”模块,您可以有效地处理 ZIP 存档并将新文件集成到您的 Python 脚本中。在计算机编程领域的文件压缩、存储和分发方面,此强大工具是一项宝贵的资产。因此,请利用 Python 的适应性和有效性来增强您使用 ZIP 存档的文件管理操作!

更新于: 2023年9月11日

2K+ 次查看

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告