原文:https://www.cnblogs.com/grissom/articles/6644991.html
tarfile模块
TarFile类对于就是tar压缩包实例. 其由member块组成, member块则包括header块和data块. 每个member以TarInfo对象形式描述. 所以TarFile就是TarInfo的序列. 其初始化函数的形参和TarFile类的属性对应, 其中比较重要是dereference属性,默认False(此时symbolic文件会以符号文件存进去),设置为True时会将其目标文件存到压缩包.
- getmember(name), getmembers(), getnames(): 分别返回指定文件名的TarInfo, 所有TarInfo和所有TarInfo文件名. 后两者顺序一致. 如果里面有很多个同名的member, 则取最后的.
- list(verbose=True) 列出tar里的文件信息, verbose相对于
ls -l
- next() 就是for方法迭代器调用的, 返回下一个TarInfo对象.
- extractall(path=”.”, members=None), 解压所有文件, path是解压路径,默认当前目录,如果指明members(一个子集,TarInfo列表, 也可以是迭代器).
- extract(member, path=””), 解压指定member的文件,path是解压路径.
- extractfile(member): 提取相应对象为一个只读文件对象. member这里可以是文件名或者TarInfo.
- add(name, arcname=None, recursive=True, exclude=None, filter=None): 根据文件名创建TarInfo对象并添加文件到压缩包,可以指定arcname在压缩包里面使用的另外的名字, recursive是对文件夹处理时是否递归, exclude不建议用,filter(需要用key=value形式)是一个函数名,输入是TarInfo对象, 返回新的TarInfo对象或None(None的话就不被写入到压缩包, 可以用于过滤, 所以替代了exclude)
- addfile(tarinfo, fileobj=None): 将TarInfo对象或者文件对象添加到压缩包.一般配合gettarinfo使用
- gettarinfo(name=None, arcname=None, fileobj=None): 通过文件名或文件对象来创造TarInfo对象. arcname可以重命名文件
- close() 关闭
1
2
3
4
5
6
7
8
9
10
11
12
import
tarfile
# 压缩
tar
=
tarfile.
open
(
'your.tar'
,
'w'
)
# 创建一个压缩包
tar.add(
'/Users/wupeiqi/PycharmProjects/bbs2.log'
, arcname
=
'bbs2.log'
)
# 将文件添加到压缩包并命名
tar.add(
'/Users/wupeiqi/PycharmProjects/cmdb.log'
, arcname
=
'cmdb.log'
)
#
tar.close()
# 关闭压缩包
# 解压
tar
=
tarfile.
open
(
'your.tar'
,
'r'
)
# 打开一个压缩包
tar.extractall()
# 解压包内所有文件(可设置解压地址)
tar.close()
# 关闭压缩包