如何使用 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.