TarFile类对于就是tar压缩包实例. 其由member块组成, member块则包括header块和data块. 每个member以TarInfo对象形式描述. 所以TarFile就是TarInfo的序列. 其初始化函数的形参和TarFile类的属性对应, 其中比较重要是dereference属性,默认False(此时symbolic文件会以符号文件存进去),设置为True时会将其目标文件存到压缩包.
ls -l
1 import tarfile 2 3 # 压缩 4 tar = tarfile.open('your.tar','w') # 创建一个压缩包 5 tar.add('/Users/wupeiqi/PycharmProjects/bbs2.log', arcname='bbs2.log') # 将文件添加到压缩包并命名 6 tar.add('/Users/wupeiqi/PycharmProjects/cmdb.log', arcname='cmdb.log') # 7 tar.close() # 关闭压缩包 8 9 # 解压 10 tar = tarfile.open('your.tar','r') # 打开一个压缩包 11 tar.extractall() # 解压包内所有文件(可设置解压地址) 12 tar.close() # 关闭压缩包
压缩某个目录下所有文件
def compress_file(tarfilename, dirname): # tarfilename是压缩包名字,dirname是要打包的目录 if os.path.isfile(dirname): with tarfile.open(tarfilename, 'w') as tar: tar.add(dirname) else: with tarfile.open(tarfilename, 'w') as tar: for root, dirs, files in os.walk(dirname): for single_file in files: # if single_file != tarfilename: filepath = os.path.join(root, single_file) tar.add(filepath) compress_file('test.tar', 'test.txt') compress_file('t.tar', '.')
添加文件到已有的tar包中
def addfile(tarfilename, dirname): # tarfilename是压缩包名字,dirname是要打包的目录 if os.path.isfile(dirname): with tarfile.open(tarfilename, 'a') as tar: tar.add(dirname) else: with tarfile.open(tarfilename, 'a') as tar: for root, dirs, files in os.walk(dirname): for single_file in files: # if single_file != tarfilename: filepath = os.path.join(root, single_file) tar.add(filepath) addfile('t.tar', 'ttt.txt') addfile('t.tar', 'ttt')
其中open的原型是:
tarfile.open(name=None, mode='r', fileobj=None, bufsize=10240, **kwargs)
mode值有:
'r' or 'r:*' Open for reading with transparent compression (recommended). 'r:' Open for reading exclusively without compression. 'r:gz' Open for reading with gzip compression. 'r:bz2' Open for reading with bzip2 compression. 'a' or 'a:' Open for appending with no compression. The file is created if it does not exist. 'w' or 'w:' Open for uncompressed writing. 'w:gz' Open for gzip compressed writing. 'w:bz2' Open for bzip2 compressed writing.
原文链接:https://www.cnblogs.com/shona/p/11953678.html