类Unix的系统,打包文件经常使用的就是tar包,结合zip工具,可以方便的打包并解压。
在python的标准库里面有tarfile库,可以方便实现生成了展开tar包。使用这个库最大的好处,可能就在于不需要使用外部的程序调用来实现展开tar包。要知道subprocess库的使用看似简单,但是真要处理异常,还是比较麻烦的事。
tarfile.open()函数可以返回一个TarFile对象,同样实现了ContextManager接口,你可以使用with语句。
首先可以使用list()方法,打印输出包里面的内容。


对于程序来说,这个基本没有什么用,但是用于调试查看还是不错的。
接着是提取文件,extractall()可以提取所有文件到指定文件夹:
以下代码提取所有文件到extracted子目录


TarFile实现了next()方法,也就是可以使用for in语句进行遍历,返回的对象是TarInfo类型:


当然也可以解压单个文件,使用extract()方法,可以传入一个TarInfo实例,也可以传入路径的字符串。下面代码遍历传入TarInfo,展开到extracted2目录。后面一部分实例使用字符串,展开到extracted3目录。


extract函数有个缺点,就是没有办法用另一个文件名进行展开,只能使用extractfile返回的内容,写入另外一个已打开的文件,希望以后能直接提供这个功能。

