如何使用 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+ 阅读量

开启您的 职业生涯

通过完成课程获得认证

立即开始
广告