使用Python读写tar存档文件(tarfile)
“tar”实用程序最初是为UNIX操作系统引入的。其目的是将多个文件收集在一个通常称为tarball的单个存档文件中,这使分发文件变得容易。Python标准库的tarfile模块中的函数可帮助创建tar存档并根据需要从tarball中提取。可以使用gzip,bz2和lzma压缩或完全不压缩来构建档案。
此模块中定义的主要功能是main()
使用完成写入tar文件或从中读取文件的功能。
打开()
此函数返回与文件名相对应的TarFile对象,该文件名作为参数提供给它。该函数需要另一个名为mode的参数,默认情况下为'r'表示无压缩。其他模式如下
打开以透明压缩方式阅读。
打开后无需压缩即可阅读。
打开以使用gzip压缩进行阅读。
打开以使用bzip2压缩进行读取。
以lzma压缩打开以供阅读。
专门创建不压缩的tarfile。
用gzip压缩创建一个tarfile。
创建具有bzip2压缩的tarfile。
创建具有lzma压缩的tarfile。
打开以进行不压缩的追加。
打开以进行未压缩的写入。
打开以进行gzip压缩编写。
打开以进行bzip2压缩写入。
为lzma压缩写打开。
该模块定义了TarFile类。代替open()
函数,可以通过调用构造函数实例化TarFile对象。
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
可以使用以下命令行选项。
以下命令行将在当前目录下的newdir文件夹中提取line.tar。
C:\python36>python -m tarfile -e line.tar newdir/
以下命令行将列出tar归档文件中的所有文件。
C:\python36>python -m tarfile -l files.tar
这篇关于tarfile模块的文章解释了其中定义的类和函数。