Python标准库之zipfile和tarfile模块的使用

yizhihongxing

Python标准库之zipfile和tarfile模块的使用攻略

简介

压缩文件在网页和文件传输中是很常见的,很多时候我们需要用到Python对压缩文件的操作。Python标准库中提供了两个模块zipfile和tarfile,可以用来读取、写入、解压缩、压缩zip、tar和其他常见的压缩格式文件。

本篇攻略将介绍zipfile和tarfile模块的使用方法,包括它们的常用的方法和实际应用的示例。

zipfile模块

zipfile模块提供了一种在Python中管理zip文件(存档,或存档文件)的方式。它使用标准的zip文件格式。使用zipfile模块可以:

  • 向zip文件添加文件或文件夹
  • 从zip文件中提取文件或文件夹
  • 列出zip文件中的文件
  • 读取zip文件中的文件的内容
  • 在zip文件中删除文件或文件夹

ZipFile打开和关闭

打开压缩文件并返回ZipFile对象,可以使用以下语法:

import zipfile
with zipfile.ZipFile("example.zip", "r") as zip_file:
    # operations to do with zip file

zipfile.ZipFile 接收两个参数:

  • zipfile 必须指定待打开的压缩文件名或文件对象。
  • mode 是可选的字符串参数。它指定zip在打开文件时的模式。默认模式是"r",表示打开zip文件,以便读取其内容。

使用with语句来确保文件在使用完成后被关闭。

ZipFile增加和提取文件

要向zip文件中添加文件或文件夹,请使用 write() 方法。此方法接收文件名或目录名,注意:目录名是将添加目录下的所有文件。例如:

with zipfile.ZipFile("example.zip", "w") as zip_file:
    zip_file.write("file1.txt")
    zip_file.write("directory1")

在上面的代码示例中,使用了"example.zip"打开zip文件,然后使用 write() 方法,添加了一个 file1.txt 文件和一个名为 directory1 的文件夹。

要从zip文件中提取文件或文件夹,请使用 extract() 方法。此方法接受文件名或目录名作为参数。例如:

with zipfile.ZipFile("example.zip", "r") as zip_file:
    zip_file.extract("file1.txt")
    zip_file.extract("directory1")

在上面的代码示例中,使用"example.zip"打开zip文件,然后使用 extract() 方法,从zip文件中提取出了一个 file1.txt 文件和一个名为 directory1 的文件夹。

ZipFile列表

要列出zip文件中的所有文件,请使用 namelist() 方法。例如:

with zipfile.ZipFile("example.zip", "r") as zip_file:
    files_list = zip_file.namelist()
    print(files_list)

在上面的代码示例中,使用"example.zip"打开zip文件,使用 namelist() 方法获取压缩文件中的所有文件,然后打印出来。

ZipFile读取文件内容

要在zip文件中读取文件的内容,请使用 open() 方法。此方法接收文件名和模式作为参数。这里的模式与Python内置的"open()"方法中的模式相同。例如:

with zipfile.ZipFile("example.zip", "r") as zip_file:
    with zip_file.open("file1.txt", "r") as file:
        print(file.read().decode("utf-8"))

在上面的代码示例中,使用 "example.zip" 打开zip文件,使用 open() 方法读取文件1.txt中的内容,然后打印出来。

ZipFile删除文件

要从zip文件中删除文件,请使用 remove() 方法。此方法接收文件名作为参数。例如:

with zipfile.ZipFile("example.zip", "w") as zip_file:
    zip_file.write("file1.txt")
    zip_file.write("file2.txt")

with zipfile.ZipFile("example.zip", "a") as zip_file:
    zip_file.remove("file2.txt")

在上面的代码示例中,首先使用 "example.zip" 打开zip文件,使用 write() 方法添加了两个文件。然后,使用 remove() 方法,从zip文件中删除了一个文件。最后,使用 append 打开zip文件,并且删除的文件不再在zip文件中。

tarfile模块

tarfile模块提供了一种在Python中管理 tar存档文件的方式。它使用标准的tar文件格式。使用tarfile模块可以:

  • 创建tar文件
  • 向tar文件添加文件或文件夹
  • 从tar文件中提取文件或文件夹
  • 列出tar文件中的文件
  • 读取tar文件中的文件的内容
  • 在tar文件中删除文件或文件夹

tarfile打开和关闭

打开一个 tar 文件并返回一个 TarFile 对象的方法与 zipfile.ZipFile 相似,只是操作的文件类型不同。可以使用以下语法:

import tarfile
with tarfile.open("example.tar", "r") as tar_file:
    # operations to do with tar file

tarfile.open 接收两个参数:

  • tarfile 必须指定待打开的tar文件名或文件对象。
  • mode 是可选的字符串参数。它指定tar在打开文件时的模式。默认模式是 "r" ,它表示打开 tar 文件,以便读取其内容。

使用with语句来确保文件在使用完成后被关闭。

tarfile增加和提取文件

要将文件或文件夹添加到 tar 文件中,请使用 add() 方法:

with tarfile.open("example.tar", "w") as tar_file:
    tar_file.add("file1.txt")
    tar_file.add("directory1")

在上面的代码示例中,使用 "example.tar" 打开 tar 文件,然后使用 add() 方法,添加了一个 file1.txt 文件和一个名为 directory1 的文件夹。

要从 tar 文件中提取文件或文件夹,请使用 extract() 方法。

with tarfile.open("example.tar", "r") as tar_file:
    tar_file.extract("file1.txt")
    tar_file.extract("directory1")

在上面的代码示例中,使用 "example.tar" 打开 tar 文件,然后使用 extract() 方法,从 tar 文件中提取出了一个 file1.txt 文件和一个名为 directory1 的文件夹。

tarfile列表

要列出tar文件中的所有文件,请使用 getnames() 方法。例如:

with tarfile.open("example.tar", "r") as tar_file:
    files_list = tar_file.getnames()
    print(files_list)

在上面的代码示例中,使用 "example.tar" 打开tar文件,使用 getnames() 方法获取tar文件中的所有文件,然后打印出来。

tarfile读取文件内容

要在tar文件中读取文件的内容,请使用 extractfile() 方法。此方法接收文件名作为参数。例如:

with tarfile.open("example.tar", "r") as tar_file:
    with tar_file.extractfile("file1.txt") as file:
        print(file.read().decode("utf-8"))

在上面的代码示例中,使用 "example.tar" 打开tar文件,使用 extractfile() 方法读取文件1.txt中的内容,然后打印出来。

tarfile删除文件

要从tar文件中删除文件,请使用 remove() 方法。此方法接收文件名作为参数。例如:

with tarfile.open("example.tar", "w") as tar_file:
    tar_file.add("file1.txt")
    tar_file.add("file2.txt")

with tarfile.open("example.tar", "a") as tar_file:
    tar_file.remove("file2.txt")

在上面的代码示例中,首先使用 "example.tar" 打开tar文件,使用 add() 方法添加了两个文件。然后,使用 remove() 方法,从tar文件中删除了一个文件。最后,使用 append 打开tar文件,并且删除的文件不再在tar文件中。

示例

示例一:将文件夹压缩成zip文件

下面是一个示例,将当前工作目录下的文件夹 test 压缩成 test.zip 文件:

import zipfile  
import os  

def zip_dir(dirname, zipfilename):  
    filelist = []  

    if os.path.isfile(dirname):  
        filelist.append(dirname)  
    else :  
        for root, dirs, files in os.walk(dirname):  
            for name in files:  
                filelist.append(os.path.join(root, name))  

    zf = zipfile.ZipFile(zipfilename, "w", zipfile.zlib.DEFLATED)  
    for tar in filelist:  
        arcname = tar[len(dirname):]  
        print arcname  
        zf.write(tar, arcname)  
    zf.close()  

zip_dir("test","test.zip") 

示例二:将文件夹压缩成tar文件

下面是一个示例,将当前工作目录下的文件夹 test 压缩成 test.tar文件:

import tarfile
import os

def make_tarfile(output_filename, source_dir):
    with tarfile.open(output_filename, "w:gz") as tar:
        tar.add(source_dir, arcname=os.path.basename(source_dir))

make_tarfile("test.tar", "test")

小结

以上介绍了zipfile和tarfile模块的使用方法,这两个模块都是Python标准库的一部分,所以不需要额外安装。在实际应用中,可以按需使用这些模块,处理压缩文件。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python标准库之zipfile和tarfile模块的使用 - Python技术站

(0)
上一篇 2023年6月3日
下一篇 2023年6月3日

相关文章

  • pip报错“ValueError: invalid literal for int() with base 10: ‘3.2’”怎么处理?

    当使用Java的Hibernate框架时,可能会遇到“LockAcquisitionException”错误。这个错误通常是由以下原因之一引起的: 并发访问:如果多个线程同时访问同一个对象,则会出现此错误。在这种情况下,需要使用Hibernate的锁定机制来避免并发访问。 死锁:如果多个线程同时持有不同的锁,并且每个线程都试图获取另一个线程持有的锁,则会出现…

    python 2023年5月4日
    00
  • 如何在Python中更新SQLite数据库中的数据?

    以下是在Python中更新SQLite数据库中的数据的完整使用攻略。 更新SQLite数据库中的数据简介 在Python中,可以使用sqlite3模块连接SQLite数据库,并使用UPDATE语句更新数据。更新数据时,需要指要的表、要更新的列和要更新的值,以及更新条件。更新结果可以使用游标对象的rowcount属性获取。 步骤1:导入模块 在Python中,…

    python 2023年5月12日
    00
  • python实现微信自动回复功能

    下面就给大家详细讲解一下“Python实现微信自动回复功能”的完整攻略。 简介 微信自动回复功能是一项很有用的工具,可以让我们快速回复一些常见的问题以及提高我们的聊天效率。今天我们将使用Python编写一个自动回复脚本实现微信自动回复功能。 准备工作 在开始之前,需要安装一些Python库和其他工具,具体如下: wxpy库:一个Python微信个人号API的…

    python 2023年5月19日
    00
  • python中format函数如何使用

    当我们需要将数据按照一定的格式显示时,可以利用 Python 中内置的 format 函数。format 函数可以将字符串中的某些位置替换为传递进来的参数,因此可以精确地控制输出的格式。 语法格式 format函数的语法格式如下: string.format(args) 其中: string:需要进行格式化的字符串。 args:传递给 format 函数的一…

    python 2023年5月18日
    00
  • Python上下文管理器详细使用教程

    Python上下文管理器详细使用教程 什么是上下文管理器? 在Python中,上下文管理器是一种可以管理代码块执行上下文的对象,它可以定义在什么情况下执行代码块以及在执行前/后需要做哪些操作。最常见的上下文管理器是with语句,with语句可以在代码块执行前自动调用一个__enter__方法,在代码块执行结束后自动调用一个__exit__方法,从而能够很好地…

    python 2023年6月2日
    00
  • python中scipy.stats产生随机数实例讲解

    下面是“Python中scipy.stats产生随机数实例讲解”的完整攻略: 什么是SciPy? SciPy是一个用于科学计算的Python库。 它主要用于数值计算,包括求解线性代数、 优化、 随机采样和信号处理等问题。 什么是SciPy.stats? Scipy.stats是Scipy中的概率分布函数库,主要用于生成和模拟各种概率分布,如正态分布、卡方分布…

    python 2023年6月3日
    00
  • python文字转语音实现过程解析

    下面我们就来详细解析一下如何实现 Python 文字转语音的过程。 1. 安装第三方库 要实现 Python 文字转语音,我们首先需要安装一个第三方库。这个库叫做 pyttsx3。我们可以用 pip 命令来安装: pip install pyttsx3 2. 编写代码 安装完库之后,我们就可以开始编写 Python 代码了。先引入 pyttsx3 库: im…

    python 2023年6月6日
    00
  • pytest使用@pytest.mark.parametrize()实现参数化的示例代码

    以下是关于“pytest使用@pytest.mark.parametrize() 实现参数化的示例代码”的完整攻略。 1. 简介 pytest.mark.parametrize() 是 pytest 中用来实现参数化测试的方法,可以用来避免重复测试相似用例的冗余代码。 2. 语法 pytest.mark.parametrize() 函数的语法如下: @pyt…

    python 2023年5月13日
    00
合作推广
合作推广
分享本页
返回顶部