tarfile 模块可以用来读写 tar 归档,包括使用 gzip, bz2 和 lzma 压缩的归档。 请使用 zipfile 模块来读写 .zip 文件,或者使用 shutil 的高层级函数。
一些事实和数字:
读写 gzip, bz2 和 lzma 解压的归档要求相应的模块可用。
支持读取 / 写入 POSIX.1-1988 (ustar) 格式。
对 GNU tar 格式的读/写支持,包括 longname 和 longlink 扩展,对所有种类 sparse 扩展的只读支持,包括 sparse 文件的恢复。
对 POSIX.1-2001 (pax) 格式的读/写支持。
处理目录、正常文件、硬链接、符号链接、fifo 管道、字符设备和块设备,并且能够获取和恢复文件信息例如时间戳、访问权限和所有者等。
在 3.3 版更改: 添加了对 lzma 压缩的支持。
tarfile.open(name=None, mode='r', fileobj=None, bufsize=10240, **kwargs)
针对路径名 name 返回 TarFile 对象。
mode 必须是 'filemode[:compression]' 形式的字符串,其默认值为 'r'。 以下是模式组合的完整列表:
模式
action
'r' or 'r:*'
打开和读取使用透明压缩(推荐)。
'r:'
打开和读取不使用压缩。
'r:gz'
打开和读取使用gzip 压缩。
'r:bz2'
打开和读取使用bzip2 压缩。
'r:xz'
打开和读取使用lzma 压缩。
'x'或'x:'
创建tarfile不进行压缩。如果文件已经存在,则抛出 FileExistsError 异常。
'x:gz'
使用gzip压缩创建tarfile。如果文件已经存在,则抛出 FileExistsError 异常。
'x:bz2'
使用bzip2 压缩创建tarfile。如果文件已经存在,则抛出 FileExistsError 异常。
'x:xz'
使用lzma 压缩创建tarfile。如果文件已经存在,则抛出 FileExistsError 异常。
'a' or 'a:'
打开以便在没有压缩的情况下追加。如果文件不存在,则创建该文件。
'w' or 'w:'
打开用于未压缩的写入。
'w:gz'
打开用于 gzip 压缩的写入。
'w:bz2'
打开用于 bzip2 压缩的写入。
'w:xz'
打开用于 lzma 压缩的写入。
请注意 'a:gz', 'a:bz2' 或 'a:xz' 是不可能的组合。 如果 mode 不适用于打开特定(压缩的)文件用于读取,则会引发 ReadError。 请使用 mode 'r' 来避免这种情况。 如果某种压缩方法不受支持,则会引发 CompressionError。
如果指定了 fileobj,它会被用作对应于 name 的以二进制模式打开的 file object 的替代。 它会被设定为处在位置 0。
对于 'w:gz', 'r:gz', 'w:bz2', 'r:bz2', 'x:gz', 'x:bz2' 等模式,tarfile.open() 接受关键字参数 compresslevel (默认值为 9) 来指定文件的压缩等级。
针对特殊的目的,还存在第二种 mode 格式: 'filemode|[compression]'。 tarfile.open() 将返回一个将其数据作为数据块流来处理的 TarFile 对象。 对此文件将不能执行随机查找。 如果给定了 fileobj,它可以是任何具有 read() 或 write() 方法 (由 mode 确定) 的对象。 bufsize 指定块大小,默认值为 20 * 512 字节。 可与此格式组合使用的有 sys.stdin, 套接字 file object 或磁带设备等。 但 目前可用的模式如下:
模式
动作
'r|*'
打开 tar 块的 流 以进行透明压缩读取。
'r|'
打开一个未压缩的 tar 块的 stream 用于读取。
'r|gz'
打开一个 gzip 压缩的 stream 用于读取。
'r|bz2'
打开一个 bzip2 压缩的 stream 用于读取。
'r|xz'
打开一个 lzma 压缩 stream 用于读取。
'w|'
打开一个未压缩的 stream 用于写入。
'w|gz'
打开一个 gzip 压缩的 stream 用于写入。
'w|bz2'
打开一个 bzip2 压缩的 stream 用于写入。
'w|xz'
打开一个 lzma 压缩的 stream 用于写入。
在 3.5 版更改: 添加了 'x' (单独创建) 模式。
在 3.6 版更改: name 形参接受一个 path-like object。
class tarfile.TarFile
用于读取和写入 tar 归档的类。 请不要直接使用这个类:而要使用 tarfile.open()。
tarfile.is_tarfile(name)
如果 name 是一个 tarfile 模块能读取的 tar 归档文件则返回 True。
tarfile 模块定义了以下异常: