Python 如何从zip文件中提取所有的.txt文件

Python 如何从zip文件中提取所有的.txt文件

可以使用ZIP归档将多个文件压缩并存储在一起,这在数据处理和文件管理领域非常常见。Python提供了许多模块来处理ZIP文件,因为它是一种灵活且强大的语言。从ZIP归档中提取特定文件(如所有的.txt文件)的需求是一个频繁的活动。本文将深入介绍使用Python从ZIP包中提取每个.txt文件的过程。我们将逐步讲解原理,并提供一些实际示例代码。

从ZIP归档中提取所有文件

首先,让我们学习如何从ZIP包中提取所有文件。这个示例将为我们后面提取和过滤.txt文件的示例提供基础。以下是关键步骤:

示例

在这个示例中,我们定义了一个名为extract_all_files的方法,它接受ZIP包的路径和应该提取到的文件夹作为参数。使用zipfile,我们可以打开ZIP归档。使用ZipFile()函数以只读模式(’r’)来使用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()构建目标文件路径。文件在ZIP存档中的相对路径由file_info.filename提供,最终文件路径通过使用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文件方面有无限的选择。所以,放心大胆地将ZIP存档的全部潜力发挥出来,用您的Python能力来进行测试吧!

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程