类Unix的系统,打包文件经常使用的就是tar包,结合zip工具,可以方便的打包并解压。
在python的标准库里面有tarfile库,可以方便实现生成了展开tar包。使用这个库最大的好处,可能就在于不需要使用外部的程序调用来实现展开tar包。要知道subprocess库的使用看似简单,但是真要处理异常,还是比较麻烦的事。
tarfile.open()函数可以返回一个TarFile对象,同样实现了ContextManager接口,你可以使用with语句。
首先可以使用list()方法,打印输出包里面的内容。
![479ad1a4c40be8a2fd7a2022818a2074.png](https://i-blog.csdnimg.cn/blog_migrate/c37fe1134e8f9a0611854e01f0e873cf.jpeg)
![2bfbf786e02580e58212da5e464b8b3a.png](https://i-blog.csdnimg.cn/blog_migrate/8e859709f2ea78885286ecd953456b6f.jpeg)
对于程序来说,这个基本没有什么用,但是用于调试查看还是不错的。
接着是提取文件,extractall()可以提取所有文件到指定文件夹:
以下代码提取所有文件到extracted子目录
![196ea98f98639dd64e9e00c22080cee7.png](https://i-blog.csdnimg.cn/blog_migrate/b1fae32f820d364436114bcab6f58df0.jpeg)
![504fe1c17704885294aa40a191502446.png](https://i-blog.csdnimg.cn/blog_migrate/7d0232a1d763476dd75eafe0eb3133f0.jpeg)
TarFile实现了next()方法,也就是可以使用for in语句进行遍历,返回的对象是TarInfo类型:
![04303a16e39f245d26068455e9c55ac1.png](https://i-blog.csdnimg.cn/blog_migrate/bb3e575facfdcd90722c0d6111589239.jpeg)
![643c7a6c8d27f5f8d06d89c7aa5a3ea3.png](https://i-blog.csdnimg.cn/blog_migrate/7e538f6c8bf276729221cc4fc10b6058.jpeg)
当然也可以解压单个文件,使用extract()方法,可以传入一个TarInfo实例,也可以传入路径的字符串。下面代码遍历传入TarInfo,展开到extracted2目录。后面一部分实例使用字符串,展开到extracted3目录。
![12c8e76755d572496173488515ae246b.png](https://i-blog.csdnimg.cn/blog_migrate/2eb3e8373a37277a64536accacac2ade.jpeg)
![4a822cd474267bcb92ef211b54d220b7.png](https://i-blog.csdnimg.cn/blog_migrate/d0e3c7951cbf89a5d65ce5ab9537c5d6.jpeg)
extract函数有个缺点,就是没有办法用另一个文件名进行展开,只能使用extractfile返回的内容,写入另外一个已打开的文件,希望以后能直接提供这个功能。
![971bd8ffd579cb8bc83a4d8691ab87ca.png](https://i-blog.csdnimg.cn/blog_migrate/815c1da3c36facaee8cb5125007b4602.jpeg)
![4ccfdab036676515ec4acc7b34ef4895.png](https://i-blog.csdnimg.cn/blog_migrate/a03525b2b14e49c205c2a40a05de8c7f.jpeg)