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

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

随着数据处理越来越普遍,我们常常需要把数据打包成压缩包来传递或者存储。如果我们想提取压缩包中指定类型的文件,比如txt文件,一个一个手动解压显然非常麻烦,而且容易出错。利用Python的zipfile库,我们可以快速、便捷地从zip文件中提取所有的txt文件。

阅读更多:Python 教程

准备工作

在进行操作之前,我们需要先导入zipfile库:

import zipfile

接着,我们需要准备好要操作的zip文件和提取文件的条件。假设我们有一个名为”data.zip”的zip文件被放置在D盘根目录下,其中有些文件是txt文件。为方便演示,我们可以先新建一个test文件夹,将zip文件放在其中:

D:\test\data.zip

要从zip文件中提取所有的txt文件,我们需要先定义一个函数,将所有txt文件的文件名存入一个列表中,然后遍历列表,依次提取每个txt文件到指定的位置。

代码实现

代码的实现分为两部分,第一部分是将txt文件名存入列表中,第二部分是依次提取每个txt文件。

第一部分:获取txt文件名

def get_txt_file_list(zip_file):
    """
    获取zip文件中所有的txt文件名
    """
    txt_file_list = []
    with zipfile.ZipFile(zip_file, 'r') as myzip:
        # 获取zip文件中所有文件名
        file_names = myzip.namelist()
        # 遍历所有文件名,筛选出txt文件
        for file_name in file_names:
            if file_name.endswith('.txt'):
                txt_file_list.append(file_name)
    # 返回txt文件名列表
    return txt_file_list

上面的代码定义了一个名为get_txt_file_list的函数。它有一个参数zip_file,表示要提取文件的zip文件路径。函数的实现分为两步:

  1. 使用ZipFile类打开zip文件,获取所有文件名。
  2. 遍历所有文件名,筛选出所有的txt文件名。

我们可以使用结束符”.endswith”筛选出所有以”.txt”结尾的文件名,并将它们添加到txt_file_list中。

在这里需要注意的是,我们使用了with结构来打开zip文件,这样可以确保文件在使用完后被正确关闭,避免出现文件句柄未释放的问题。

第二部分:提取txt文件

def extract_txt_files(zip_file, dest_dir):
    """
    提取zip文件中的txt文件到指定目录
    """
    # 创建目录
    if not os.path.exists(dest_dir):
        os.makedirs(dest_dir)
    # 获取txt文件名列表
    txt_file_list = get_txt_file_list(zip_file)
    # 遍历txt文件名列表,依次提取txt文件到目标目录
    with zipfile.ZipFile(zip_file, 'r') as myzip:
        for file_name in txt_file_list:
            # 读取zip文件中的txt文件内容
            content = myzip.read(file_name).decode('utf-8')
            # 指定文件名并保存到目标目录
            file_path = os.path.join(dest_dir, os.path.basename(file_name))
            with open(file_path, 'w', encoding='utf-8') as f:
                f.write(content)
    print(f"已将{zip_file}中所有的txt文件提取到{dest_dir}中")

上面的代码定义了一个名为extract_txt_files的函数。它有两个参数:zip_file表示要提取文件的zip文件路径,dest_dir表示提取文件的目标文件夹路径。该函数的实现分为三步:

  1. 创建目标目录:如果目标目录不存在,则先创建目录。
  2. 获取txt文件名列表:调用get_txt_file_list函数获取txt文件名列表。
  3. 遍历txt文件名列表,依次提取txt文件到目标目录:使用ZipFile类读取zip文件中的txt文件内容,然后指定文件名并保存到目标目录中。

在这段代码中,我们使用了os模块来操作目录。我们使用os.path.join函数来连接目录,确保代码在不同操作系统中也能正确运行。同时,由于txt文件的编码可能不同,我们使用”utf-8″编码解码读取的txt文件内容。

完整代码

import os
import zipfile

def get_txt_file_list(zip_file):
    """
    获取zip文件中所有的txt文件名
    """
    txt_file_list = []
    with zipfile.ZipFile(zip_file, 'r') as myzip:
        # 获取zip文件中所有文件名
        file_names = myzip.namelist()
        # 遍历所有文件名,筛选出txt文件
        for file_name in file_names:
            if file_name.endswith('.txt'):
                txt_file_list.append(file_name)
    # 返回txt文件名列表
    return txt_file_list

def extract_txt_files(zip_file, dest_dir):
    """
    提取zip文件中的txt文件到指定目录
    """
    # 创建目录
    if not os.path.exists(dest_dir):
        os.makedirs(dest_dir)
    # 获取txt文件名列表
    txt_file_list = get_txt_file_list(zip_file)
    # 遍历txt文件名列表,依次提取txt文件到目标目录
    with zipfile.ZipFile(zip_file, 'r') as myzip:
        for file_name in txt_file_list:
            # 读取zip文件中的txt文件内容
            content = myzip.read(file_name).decode('utf-8')
            # 指定文件名并保存到目标目录
            file_path = os.path.join(dest_dir, os.path.basename(file_name))
            with open(file_path, 'w', encoding='utf-8') as f:
                f.write(content)
    print(f"已将{zip_file}中所有的txt文件提取到{dest_dir}中")

操作演示

为了验证代码的正确性,我们可以在D盘根目录下新建一个名为”data.zip”的zip文件。data.zip中包含以下文件:

data.zip
|-- data1.txt
|-- data2.txt
|-- data3.csv
|-- data4.xlsx

我们希望从data.zip中提取所有的txt文件到D盘根目录下的test文件夹中。可以使用以下代码:

zip_file = 'D:\test\data.zip'
dest_dir = 'D:\test\extracted_files'
extract_txt_files(zip_file, dest_dir)

代码运行后,我们将在D:\test\extracted_files中得到两个名为data1.txt和data2.txt的文件,它们是从data.zip中提取出来的。

结论

通过Python的zipfile库,我们可以轻松提取zip文件中的指定类型文件。本文中,我们介绍了如何从zip文件中提取所有的txt文件,通过代码实现了zip文件的解压过程。这个解压的过程不仅可以应用在txt文件上,还可以应用在其他类型的文件上。相信在以后的数据处理中,这个技巧一定会帮到你。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程