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