如何使用 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+ 次檢視

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.