tarfile
tarfile - 读写tar档案文件
2.3版本的新功能。
源代码:
Lib / tarfile.py
该tarfile
模块可以读写tar档案,包括使用gzip或bz2压缩的档案。使用该zipfile
模块读取或写入.zip
文件,或shutil中的更高级别的函数。
一些事实和数字:
- 如果各个模块可用,则读取和写入
gzip
并bz2
压缩归档。
- 读/写支持POSIX.1-1988(ustar)格式。
- 对GNU tar格式的读/写支持,包括长
名称
和长链接
扩展,对稀疏
扩展的只读支持。
- 读/写支持POSIX.1-2001(pax)格式。
2.6版本中的新功能。
- 处理目录,常规文件,硬链接,符号链接,fifo,字符设备和块设备,并能够获取和恢复文件信息,如时间戳,访问权限和所有者。
- POSIX.1-1988 ustar格式(
USTAR_FORMAT
)。它支持的文件名长度最多为256个字符,链接名称最多为100个字符。最大文件大小为8千兆字节。这是一个古老而有限但广泛支持的格式。
- GNU tar格式(
GNU_FORMAT
)。它支持长文件名和链接名称,大于8千兆字节的文件和稀疏文件。它是GNU / Linux系统上的事实标准。tarfile
完全支持长名称的GNU tar扩展,稀疏文件支持是只读的。
- POSIX.1-2001 pax格式(
PAX_FORMAT
)。它是最灵活的格式,几乎没有限制。它支持长文件名和链接名称,大文件和便携式存储路径名。但是,今天并非所有的tar实现都能够正确处理pax归档。
在PAX
格式的扩展现有的ustar
格式。它使用额外的头部来存储不能以其他方式存储的信息。有两种类型的pax头文件:扩展头文件只影响后续文件头文件,全局头文件对整个存档文件有效并影响所有后续文件。出于便携性原因,pax标头中的所有数据都以UTF-8
编码。
还有一些可以读取但不能创建的tar格式变体:
- 古代的V7格式。这是Unix第七版的第一个tar格式,只存储常规文件和目录。名称不能超过100个字符,没有用户/组名称信息。某些档案在包含非ASCII字符的字段中错误计算标题校验和。
- SunOS tar扩展格式。这种格式是POSIX.1-2001 pax格式的变体,但不兼容。
5. Unicode问题
tar格式最初被设想为在磁带驱动器上进行备份,主要侧重于保存文件系统信息。现在,tar档案通常用于文件分发和在网络上交换档案。原始格式(所有其他格式仅仅是变体)的一个问题是没有支持不同字符编码的概念。例如,如果包含非ASCII字符,则在Latin-1
系统上无法正确读取在UTF-8
系统上创建的普通tar归档文件。包含这些字符的名称(即文件名,链接名称,用户/组名称)将显示损坏。不幸的是,没有办法自动检测存档的编码。
pax格式旨在解决此问题。它使用通用字符编码UTF-8
存储非ASCII名称。读取pax归档文件时,这些UTF-8
名称将转换为本地文件系统的编码。
unicode转换的细节由类的编码
和错误
关键字参数控制TarFile
。
编码
的默认值是本地字符编码
。它是从sys.getfilesystemencoding()
和推导出来的sys.getdefaultencoding()
。在读取模式下,编码
专门用于将来自pax归档的unicode名称转换为本地字符编码
中的字符串。在写入模式下,使用编码
取决于所选的存档格式。如果PAX_FORMAT
包含非ASCII字符的输入名称在被存储为UTF-8
字符串之前需要解码。除非使用unicode对象作为输入名称,否则其他格式不使用编码
。这些字符串在添加到存档之前会转换为8位字符串。
所述误差
参数定义如何字符都被视为不能被转换,或从编码
。可能的值在Codec Base Classes部分列出。在读取模式下,还有一个额外的方案'utf-8'
,这意味着错误
的字符被UTF-8
表示所替代。这是默认方案。在写入模式下,错误
的默认值是'strict'
确保名称信息不被忽视。