Python tarfile模块

Python tarfile模块

‘tar’实用程序最初是为UNIX操作系统引入的。它的目的是将多个文件收集在一个称为tarball的单个存档文件中,以便更容易分发文件。Python的标准库中的tarfile模块的函数可帮助创建tar归档并根据需要从tarball中提取。这些归档可以使用gzip、bz2和lzma压缩构建,也可以完全不压缩。

在这个模块中定义的open()函数用于写入tar文件或从中读取。

Open()函数

这个函数返回一个与文件名对应的TarFile对象,并将其作为参数提供。该函数还需要另一个称为mode的参数,默认为’r’,表示没有压缩。其他模式如下所示:

序号 模式与操作
1 ‘r’ 或 ‘r:*’ 以透明压缩方式打开文件进行读取。
2 ‘r:’ 以不压缩方式打开文件进行读取。
3 ‘r:gz’ 以gzip压缩方式打开文件进行读取。
4 ‘r:bz2’ 以bzip2压缩方式打开文件进行读取。
5 ‘r:xz’ 以lzma压缩方式打开文件进行读取。
6 ‘x’ 或 ‘x:’ 以不压缩方式创建文件。
7 ‘x:gz’ 以gzip压缩方式创建文件。
8 ‘x:bz2’ 以bzip2压缩方式创建文件。
9 ‘x:xz’ 以lzma压缩方式创建文件。
10 ‘a’ 或 ‘a:’ 以不压缩方式打开文件进行追加。
11 ‘w’ 或 ‘w:’ 以不压缩方式打开文件进行写入。
12 ‘w:gz’ 以gzip压缩方式打开文件进行写入。
13 ‘w:bz2’ 以bzip2压缩方式打开文件进行写入。
14 ‘w:xz’ 以lzma压缩方式打开文件进行写入。

该模块定义了TarFile类。TarFile对象可以通过调用构造函数而不是open()函数来实例化。

TarFile()方法

这个构造函数也需要一个文件名和模式参数。模式参数的可能值如上所示。

此类中的其他方法如下:

add()方法

此方法将文件添加到存档中。该方法需要一个名称,可以是文件名、目录、符号链接、快捷方式等。默认情况下,目录会递归添加。要阻止递归添加,请将递归参数设置为False。

addfile()方法

此方法将TarInfo对象添加到存档中。

extractall()方法

如果没有明确提供其他路径,此方法将将存档中的所有成员提取到当前路径。

extract()方法

此方法将指定的成员提取到给定路径,默认为当前路径。

以下示例打开一个tar文件以使用gzip算法进行压缩,并在其中添加一个文件。

import tarfile

fp=tarfile.open("zen.tar.gz","w:gz")
fp.add("zen.txt")
fp.close()

假设在当前工作目录中存在’zen.txt’文件,它将被添加到’zen.tar.gz’文件中。

以下代码从tar存档中提取文件,并提取所有文件(在此情况下只有一个文件),并将它们放在当前文件夹中。为了验证结果,您可以删除或重命名当前文件夹中的’zen.txt’。

import tarfile

fp=tarfile.open("zen.tar.gz","r:gz")
fp.extractall()
fp.close()

你会发现当前目录中出现了“zen.txt”文件。

要创建一个包含当前目录中所有文件的tar文件,请使用以下代码 –

import tarfile, glob
fp=tarfile.open('file.tar','w')
for file in glob.glob('*.*'):

   fp.add(file)
fp.close()

命令行界面

通过命令行界面可以创建和提取tar文件。例如,可以通过在命令窗口中执行以下命令将’lines.txt’文件添加到tar文件中-

C:\python311 >python -m tarfile -c line.tar lines.txt

以下命令行选项可供使用。

-l 或 –list 列出压缩文件中的文件。
-c 或 –create 从源文件创建压缩文件。
-e 或 –extract 提取压缩文件到当前目录,如果未指定output_dir。
-t 或 –test 测试压缩文件是否有效。
-v 或 –verbose 详细输出。

以下命令将在当前目录下的newdir文件夹中提取line.tar。

C:\python311>python -m tarfile -e line.tar newdir/

以下命令行将列出tar归档文件中的所有文件。

C:\python311>python -m tarfile -l files.tar

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程