如何使用 Python 從 zip 檔案中提取所有 .txt 檔案?


多個檔案可以使用 ZIP 檔案進行壓縮並一起儲存,ZIP 檔案在資料操作和檔案管理領域很常見。Python 是一種靈活且強大的語言,它提供了許多模組來無縫處理 ZIP 檔案。從 ZIP 檔案中提取特定檔案(例如所有 .txt 檔案)是一個常見的任務。本文將深入探討如何使用 Python 從 ZIP 檔案中提取所有 .txt 檔案的過程。我們將逐步講解原理,並提供一些實際的程式碼示例來說明該過程。

從 ZIP 檔案中提取所有檔案

首先,讓我們學習如何從 ZIP 檔案中提取所有檔案。此示例將為我們後續提取和過濾 .txt 檔案的其他示例奠定基礎。以下是關鍵點:

示例

在這裡,我們定義了一個名為 extract_all_files 的方法,它接收 ZIP 檔案路徑和要提取到的資料夾作為引數。使用 zipfile,我們可以開啟 ZIP 檔案。使用以讀取模式 ('r') 開啟的 ZipFile() 和 extractall() 函式,將所有檔案提取到指定的目的地資料夾。

import zipfile

def extract_all_files(zip_file_path, extract_to):
   with zipfile.ZipFile(zip_file_path, 'r') as zip_ref:
      zip_ref.extractall(extract_to)

# Example usage
zip_file_path = 'my_archive.zip'
extract_to = 'destination_folder'
extract_all_files(zip_file_path, extract_to)

提取特定檔案型別

現在我們已經瞭解瞭如何從 ZIP 檔案中提取所有檔案,我們可以專注於提取特定檔案型別,特別是 .txt 檔案。我們可以透過迭代 ZIP 檔案中的檔案列表並僅選擇副檔名為 .txt 的檔案來實現這一點。檢視以下程式碼:

示例

在這段程式碼中,我們迴圈遍歷 zip_ref.infolist() 返回的檔案詳細資訊列表。我們使用 endswith() 函式檢查每個檔案的名稱是否以 .txt 結尾。如果是,我們使用 zip_ref.extract() 函式將該特定檔案提取到指定的目的地資料夾。

import zipfile

def extract_txt_files(zip_file_path, extract_to):
   with zipfile.ZipFile(zip_file_path, 'r') as zip_ref:
      for file_info in zip_ref.infolist():
         if file_info.filename.endswith('.txt'):
            zip_ref.extract(file_info, extract_to)

# Example usage
zip_file_path = 'my_archive.zip'
extract_to = 'destination_folder'
extract_txt_files(zip_file_path, extract_to)

將檔案提取到特定的目錄結構

在許多情況下,在從 ZIP 檔案中提取資料時保持目錄結構至關重要。例如,如果 ZIP 檔案包含資料夾,我們可能希望在提取過程中保留這些資料夾。讓我們看看如何做到這一點:

示例

在此示例中,我們使用 os.path.join() 構造目標檔案路徑,以確保提取的檔案儲存在正確的目錄結構中。file_info.filename 提供了檔案中 ZIP 檔案中的相對路徑,透過使用 os.path.join() 函式將此路徑與提取目錄連線,從而生成最終檔案路徑。

import zipfile
import os

def extract_txt_files_with_structure(zip_file_path, extract_to):
   with zipfile.ZipFile(zip_file_path, 'r') as zip_ref:
      for file_info in zip_ref.infolist():
         if file_info.filename.endswith('.txt'):
            file_path = os.path.join(extract_to, file_info.filename)
            zip_ref.extract(file_info, file_path)

# Example usage
zip_file_path = 'my_archive.zip'
extract_to = 'destination_folder'
extract_txt_files_with_structure(zip_file_path, extract_to)

提取具有字首的檔案

有時,我們可能希望提取具有特定字首的檔案,而不管其副檔名如何。例如,我們可能希望提取所有名稱中包含“data_”的檔案。讓我們看看如何做到這一點:

示例

在此程式碼片段中,我們使用 startswith() 函式檢查每個檔案的名稱是否以所需的字首開頭。如果是,我們保留該特定檔案的相對路徑結構,並在將其提取到目標位置時進行保留。

import zipfile
import os

def extract_files_with_prefix(zip_file_path, extract_to, prefix):
   with zipfile.ZipFile(zip_file_path, 'r') as zip_ref:
      for file_info in zip_ref.infolist():
         if file_info.filename.startswith(prefix):
            file_path = os.path.join(extract_to, file_info.filename)
            zip_ref.extract(file_info, file_path)

# Example usage
zip_file_path = 'my_archive.zip'
extract_to = 'destination_folder'
prefix = 'data_'
extract_files_with_prefix(zip_file_path, extract_to, prefix)

使用自定義提取函式提取檔案

如果某些特定情況需要我們執行更復雜的提取操作會怎樣?這可以透過使用自定義提取函式來實現。請參閱如何將其付諸實踐:

示例

在此示例中,定義了一個名為 custom_extraction_func() 的自定義提取函式。它接收一個 file_info 物件作為輸入,並根據某些條件返回 True 或 False。在這種情況下,自定義條件是 .txt 副檔名和大於 1024 位元組的檔案大小。

ZIP 檔案路徑、目標資料夾和特定的提取函式作為引數傳遞給 custom_extract() 函式。然後,每個 ZIP 檔案中的檔案都會進行自定義提取函式呼叫,並且僅當函式返回 True 時才會執行提取。

import zipfile
import os

def custom_extraction_func(file_info):
   # Your custom condition here
   return file_info.filename.endswith('.txt') and file_info.file_size > 1024

def custom_extract(zip_file_path, extract_to, extraction_func):
   with zipfile.ZipFile(zip_file_path, 'r') as zip_ref:
      for file_info in zip_ref.infolist():
         if extraction_func(file_info):
            file_path = os.path.join(extract_to, file_info.filename)
            zip_ref.extract(file_info, file_path)

# Example usage with the custom_extraction_func
zip_file_path = 'my_archive.zip'
extract_to = 'destination_folder'
custom_extract(zip_file_path, extract_to, custom_extraction_func)

結論

在這篇深入的文章中,我們探討了如何使用 Python 的靈活 zipfile 模組從 ZIP 檔案中提取所有 .txt 檔案。首先,我們理解了 zipfile 模組和 ZIP 檔案的基礎知識。

然後,我們提供了幾個實際的程式碼示例,涵蓋了各種情況,包括提取所有檔案、提取特定檔案型別、保持目錄結構、提取具有字首的檔案以及建立自定義提取例程。

憑藉您新獲得的專業知識,您現在可以輕鬆地在 Python 中處理 ZIP 檔案。zipfile 模組為您提供了強大的功能來處理複雜的檔案操作,使您可以無限地管理和修改 ZIP 檔案。因此,請大膽嘗試,利用您的 Python 技能充分發揮 ZIP 檔案的潛力!

更新於: 2023年8月22日

2K+ 瀏覽量

開啟您的 職業生涯

完成課程獲得認證

開始學習
廣告
© . All rights reserved.