Python tarfile模块
时间:2020-02-23 14:43:35 来源:igfitidea点击:
Python tarfile模块用于读取和写入tar归档文件。
Python为我们提供了出色的工具和模块来管理压缩文件,其中包括(但不限于)使用gzip,bz2和lzma压缩等不同机制执行文件和目录压缩。
在本文中,我们将看到Python tarfile模块功能的各种实际演示。
这类似于python zip函数。
Python tarfile模块
Python tarfile模块为我们提供了执行各种操作的功能,例如:
- 读写gzip,bz2和lzma档案
- 读写POSIX.1-1988(ustar)格式
- 对GNU tar格式的读写支持
- 读写gzip,bz2和lzma档案
除了这些功能,我们还可以处理目录并还原文件信息,例如时间戳,访问权限和所有者。
检查TAR文件的有效性
我们将从一个最简单的示例开始,检查文件是否为有效的TAR文件。
我们将使用is_tarfile()
函数执行此操作:
import tarfile for file_name in [ 'README.txt', 'example.tar.gz' ]: try: print(file_name, tarfile.is_tarfile(filename)) except (IOError, err): print(file_name, err)
让我们运行此示例并检查输出:请注意,这些文件应该存在于运行此脚本的目录中。
读取TAR文件元数据
在本节中,我们将使用open()
和getnames()
函数研究与TAR文件相关的元数据,例如文件包含哪些文件:
import tarfile t = tarfile.open('example.tar.gz', 'r') print("Files in TAR file:") print(t.getnames())
让我们运行此示例并检查输出:请注意,我们只是将示例文件放在此TAR中进行演示。
在继续下一个示例之前,让我们深入了解文件的元数据。
我们将打印其大小以及与之相关的更多信息:
import tarfile import time t = tarfile.open('example.tar.gz', 'r') for info in t.getmembers(): print(info.name) print('Modified:', time.ctime(info.mtime)) print('Mode :', oct(info.mode)) print('Type :', info.type) print('Size :', info.size, 'bytes')
当我们运行该程序时,我们可以看到更多与文件有关的信息:
从档案中提取文件
其中我们将从存档文件中提取文件:
import tarfile t = tarfile.open('example.tar.gz', 'r') for file_name in [ 'TarFolder/README.txt', 'TarFolder/tarfile_validity.py' ]: try: f = t.extractfile(file_name) except KeyError: print('ERROR: Did not find %s in tar archive' % file_name) else: print(file_name, ':', f.readlines())
将文件添加到存档
其中我们将文件添加到存档文件中:
import tarfile print('creating archive') out = tarfile.open('example.tar.gz', mode='w') try: print('adding README.txt') out.add('README.txt') finally: print('closing tar archive') out.close() print('Contents of archived file:') t = tarfile.open('example.tar.gz', 'r') for member in t.getmembers(): print(member.name)
让我们运行此示例并检查输出:其中值得注意的是," w"不会保留文件的先前内容。
相反,我们可以使用" a"模式将文件追加到存档中。
将文件追加到存档
其中我们将文件追加到存档文件中,而不是使用" w"模式:
import tarfile print('creating archive') out = tarfile.open('example.tar.gz', mode='a') try: print('adding README.txt') out.add('README.txt') finally: print('closing tar archive') out.close() print('Contents of archived file:') t = tarfile.open('example.tar.gz', 'r') for member in t.getmembers(): print(member.name)