如何使用 Python 从 tar 文件中提取文件?


众所周知,在计算机编程领域,处理文件和档案就像日常工作一样。因此,有一种流行的档案类型称为 TAR 文件,它可以轻松地将文件和文件夹组合并存储在 Linux 机器中,尤其是在 Linux 机器中。它允许您将一组文件和文件夹打包成一个包,以便于共享和保持整洁。Python 是一种强大而通用的编程语言,它可以使用 TAR 档案来管理文件和文件夹。Python 有这些模块,基本上可以让你处理 TAR 文件并发挥你的魔法。因此,本文就像你学习 Python 和 TAR 文件提取的指南。我们将逐步分解它,为了保持趣味性,我们还添加了一些真实的代码片段。我们将理论转化为实践操作!

了解 TAR 文件和 Python 的 tarfile 模块

好的,让我们开始这段探索 TAR 文件的神秘领域以及 Python 模块(它使有效管理 TAR 文件变得容易)的旅程。但是,在我们开始代码示例之前,让我们先了解一些基础知识。因此,TAR 文件就像那些多合一软件包,它们将文件和文件夹组合到一个文件中。这种归档格式广泛用于基于 Unix 的系统中进行归档、分发和共享。Python 有一个强大的“tarfile 模块”,它就像终极 TAR 工具。它是 Python 生态系统的一部分,并且可以像专业人士一样管理 TAR 文件。

tarfile 模块具有有助于读取和写入 TAR 档案的工具。但是,由于我们努力了解如何从现有的 TAR 档案中提取文件,因此我们将在本文中重点介绍提取部分。

从 TAR 档案中提取所有文件

首先,让我们了解如何从 TAR 档案中提取所有文件。在此示例中,我们将 TAR 档案的所有内容提取到指定的目录中。

示例

在这里,我们继续定义函数 extract_all_files,它要求提供 TAR 档案的路径和放置输出文件的文件夹。使用 tarfile.open() 以读取模式 ('r') 打开 TAR 档案,并使用 extractall() 函数将所有文件提取到指定的目标文件夹。

import tarfile

def extract_all_files(tar_file_path, extract_to):
    with tarfile.open(tar_file_path, 'r') as tar:
        tar.extractall(extract_to)

# Example usage
tar_file_path = 'my_archive.tar'
extract_to = 'destination_folder'
extract_all_files(tar_file_path, extract_to)

提取特定文件

现在,让我们讨论如何从 TAR 档案中提取特定文件。我们可以通过提供要提取的文件名列表来实现此目的。

示例

在此代码片段中,我们继续构建一个名为 extract_specific_files 的方法,该方法接受要提取的文件名列表以及 TAR 档案的路径和目标文件夹作为输入。在使用 tarfile.open() 以读取模式打开 TAR 档案后,我们遍历给定的 file_list。我们使用 extract() 函数将列表中的每个文件提取到所需位置。

import tarfile
import os

def extract_specific_files(tar_file_path, extract_to, file_list):
    with tarfile.open(tar_file_path, 'r') as tar:
        for file_name in file_list:
            try:
                tar.extract(file_name, extract_to)
            except KeyError:
                print(f"Warning: File '{file_name}' not found in the tar archive.")

# Example usage
tar_file_path = 'my_archive.tar'
extract_to = 'destination_folder'
file_list = ['file1.txt', 'file2.txt', 'file3.txt']
extract_specific_files(tar_file_path, extract_to, file_list)

提取具有前缀的文件

有时,我们可能希望提取具有特定前缀的文件,而不管其扩展名如何。例如,我们可能希望提取所有以“data_”开头的文件。让我们看看如何实现这一点

示例

在此代码示例中,我们使用 getmembers() 方法获取 TAR 档案中所有成员(文件和目录)的列表。然后,我们使用 startswith() 方法检查每个成员的名称是否以指定的前缀开头。如果匹配,我们将使用 extract() 方法将该特定成员提取到目标文件夹。

import tarfile

def extract_files_with_prefix(tar_file_path, extract_to, prefix):
    with tarfile.open(tar_file_path, 'r') as tar:
        for member in tar.getmembers():
            if member.name.startswith(prefix):
                tar.extract(member, path=extract_to)

# Example usage
tar_file_path = 'my_archive.tar'
extract_to = 'destination_folder'
prefix = 'data_'
extract_files_with_prefix(tar_file_path, extract_to, prefix)

将文件提取到特定的目录结构

在许多情况下,在从 TAR 包中提取文件时保留目录结构至关重要。例如,如果 TAR 档案包含目录,我们可能希望在提取过程中保留这些目录。让我们看看如何做到这一点

示例

在此示例中,我们使用 getmembers() 方法获取 TAR 档案中所有成员(文件和目录)的列表。然后,我们使用 extract() 方法将每个成员提取到目标文件夹。path 参数指定目标目录,extract() 方法将根据需要创建子目录以保留原始结构。

import tarfile

def extract_with_structure(tar_file_path, extract_to):
    with tarfile.open(tar_file_path, 'r') as tar:
        for member in tar.getmembers():
            tar.extract(member, path=extract_to)

# Example usage
tar_file_path = 'my_archive.tar'
extract_to = 'destination_folder'
extract_with_structure(tar_file_path, extract_to)

使用自定义提取函数提取文件

在这里,我们探讨了可能需要根据某些条件执行更复杂的提取的情况。我们可以通过使用自定义提取函数来实现此目的。让我们看看如何实现它

示例

在此示例中,定义了一个名为 custom_extraction_func() 的自定义提取函数。它接受一个成员对象作为输入,并根据特定条件返回 True 或 False。在本例中,自定义条件规定成员的大小必须超过 1024 字节,并且必须包含 .txt 扩展名。

custom_extract() 函数采用 TAR 档案路径、目标文件夹和自定义提取函数作为参数。然后,它对 TAR 档案中的每个成员调用自定义提取函数,并且仅当函数返回 True 时才继续进行提取。

import tarfile

def custom_extraction_func(member):
    # Your custom condition here
    return member.name.endswith('.txt') and member.size > 1024

def custom_extract(tar_file_path, extract_to, extraction_func):
    with tarfile.open(tar_file_path, 'r') as tar:
        for member in tar.getmembers():
            if extraction_func(member):
                tar.extract(member, path=extract_to)

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

到目前为止,您一定已经看到,在这篇详尽的文章中,我们进行了疯狂的探索,学习了使用 Python 超灵活的 tarfile 模块从 TAR 档案中提取文件的技巧。首先,我们了解了 TAR 文件,并了解了 tarfile 模块的细节。

但是,这里不仅仅是理论!我们提供了一些真实的代码示例,这些示例解决了各种情况,包括提取所有文件、提取特定文件、提取具有前缀的文件、维护目录结构,甚至根据用户定义的条件执行特殊提取。

通过详细学习 tarfile 模块,您可以轻松地在 Python 项目中浏览和提取 TAR 档案中的文件。Python 的 tarfile 模块的功能使其成为管理 TAR 档案和高效处理文件提取的宝贵工具。因此,您可以继续前进,利用 Python 的功能,并将您的文件操作技能提升到新的高度!

更新时间: 2023-09-11

19K+ 浏览量

开启您的 职业生涯

通过完成课程获得认证

立即开始
广告
© . All rights reserved.