“ tar”实用程序最初是为UNIX操作系统引入的。其目的是将多个文件收集在一个通常称为tarball的单个存档文件中,这使分发文件变得容易。Python标准库的tarfile模块中的函数可帮助创建tar存档并根据需要从tarball中提取。可以使用gzip,bz2和lzma压缩或完全不压缩来构建档案。
此模块中定义的主要功能是main()
使用完成写入tar文件或从中读取文件的功能。
此函数返回与文件名相对应的TarFile对象,该文件名作为参数提供给它。该函数需要另一个名为mode的参数,默认情况下为'r'表示无压缩。其他模式如下
序号 | 模式与动作 |
---|---|
1 | 'r'或'r:*' 打开以透明压缩方式阅读。 |
2 | 'r:' 打开后无需压缩即可阅读。 |
3 | 'r:gz' 打开以使用gzip压缩进行阅读。 |
4 | 'r:bz2' 打开以使用bzip2压缩进行读取。 |
5 | 'r:xz' 以lzma压缩打开以供阅读。 |
6 | 'x'或'x:' 专门创建不压缩的tarfile。 |
7 | 'x:gz' 用gzip压缩创建一个tarfile。 |
8 | 'x:bz2' 创建具有bzip2压缩的tarfile。 |
9 | 'x:xz' 创建具有lzma压缩的tarfile。 |
10 | 'a'或'a:' 打开以进行不压缩的追加。 |
11 | 'w'或'w:' 打开以进行未压缩的写入。 |
12 | 'w:gz' 打开以进行gzip压缩编写。 |
13 | 'w:bz2' 打开以进行bzip2压缩写入。 |
14 | 'w:xz' 为lzma压缩写打开。 |
该模块定义了TarFile类。代替open()
函数,可以通过调用构造函数实例化TarFile对象。
该构造函数还需要一个文件名和模式参数。模式参数的可能值如上 。
此类中的其他方法如下
此方法将文件添加到存档。该方法需要一个名称,该名称可以是文件,目录,符号链接,快捷方式等的名称。默认情况下,递归添加目录。为防止递归加法,请将递归参数设置为False。
此方法将TarInfo对象添加到存档中。
如果未明确提供任何其他路径,则此方法将存档的所有成员提取到当前路径。
此方法将指定成员提取到给定路径,默认为当前路径。
以下示例打开一个使用gzip算法压缩的tar文件,并在其中添加文件。
>>> fp = tarfile.open("zen.tar.gz","w:gz") >>> fp.add("zen.txt") >>> fp.close()
假设当前工作目录中存在“ zen.txt”文件,则将其添加到“ zen.tar.gz”文件中。
以下代码从tar归档文件中提取文件,并提取所有文件(在这种情况下,仅存在于其中)并将它们放置在当前文件夹中。要验证结果,您可以删除或重命名当前文件夹中的“ zen.txt”。
>>> 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:\python36 >python -m tarfile -c line.tar lines.txt
可以使用以下命令行选项。
-l或--list | 在tarfile中列出文件。 |
-c或--create | 从源文件创建tarfile。 |
-e或--extract | 如果未指定output_dir,则将tarfile提取到当前目录中。 |
-t或--test | 测试tarfile是否有效。 |
-v或--verbose | 详细输出。 |
以下命令行将在当前目录下的newdir文件夹中提取line.tar。
C:\python36>python -m tarfile -e line.tar newdir/
以下命令行将列出tar归档文件中的所有文件。
C:\python36>python -m tarfile -l files.tar
这篇关于tarfile模块的文章解释了其中定义的类和函数。