tarfile 压缩模块 | gz | bz2 | 算法 | 追加 | 过滤 创建一个.tar.gz的压缩包

# ### tarfile 压缩模块
import tarfile
# (1)创建tarfile 压缩包
tf = tarfile.open("ceshi001.tar","w",encoding="utf-8")
# add(路径,别名) 添加文件到压缩包当中
tf.add("/bin/dash","dash")
tf.add("/bin/dd","dd")
tf.add("/bin/df","/tmp/df")
# 关闭压缩包
tf.close()  # 327680

# 按照gz算法 创建一个.tar.gz的压缩包
tf  = tarfile.open("ceshi001.tar.gz","w:gz",encoding="utf-8")
tf.add("/bin/dash","dash")
tf.add("/bin/dd","dd")
tf.add("/bin/df","/tmp/df")
tf.close()  # 162558

# 按照bz2算法 创建一个.tar.bz2的压缩包
tf = tarfile.open("ceshi001.tar.bz2","w:bz2",encoding="utf-8")
tf.add("/bin/dash","dash")
tf.add("/bin/dd","dd")
tf.add("/bin/df","/tmp/df")
tf.close()  # 147524

# 理论上:bz2算法压缩包要比gz算法压缩的包小.

# (2) 解压文件
tf = tarfile.open("ceshi001.tar.gz","r",encoding="utf-8")
# 一次性解压所有
# tf.extractall("ceshi001")
# 解压单个文件
tf.extract("dd","ceshi001_dd")
tf.close()


# (3) 追加文件
'''
tarfile 有局限性,不能对已经压缩好的包进行追加文件
只能对光打包不压缩的文件进行追加
'''
# with tarfile.open("ceshi001.tar.bz2","a",encoding="utf-8") as tf:
with tarfile.open("ceshi001.tar","a",encoding="utf-8") as tf:
	# add(路径,别名)
	tf.add("/bin/sleep","sleep")


# (4) #查看压缩包中的内容
with tarfile.open("ceshi001.tar","r",encoding="utf-8") as tf:
	res = tf.getnames()
print(res)


# ###对tarfile 的追加进行改写
'''
(1) 把原来的压缩包进行解压
(2) 把要追加的文件塞进去
(3) 重新过滤,重新打包
'''
import os
#__file__
res = os.getcwd() 
path1 = os.path.join(res,"ceshi001.tar.bz2")
path2 = os.path.join(res,"ceshi0011")
print(path1) #/mnt/hgfs/gongxiang_16/day17/ceshi001.tar.gz
print(path2) #/mnt/hgfs/gongxiang_16/day17/ceshi0011

# (1) 把原来的压缩包进行解压
with tarfile.open(path1,mode="r",encoding="utf-8") as tf:
	tf.extractall(path2)
	
# (2) 把要追加的文件塞进去
# os.system("cp -a /bin/login /mnt/hgfs/gongxiang_16/day17/ceshi0011")
os.system("cp -a /bin/login    " + path2)

# (3) 开始过滤,dd这个文件过滤掉不要了
lst = os.listdir(path2)
# print(lst)
# for i in lst:
	# print(i)
with tarfile.open(path1,"w:bz2",encoding="utf-8") as tf:
	for i in lst:
		#/mnt/hgfs/gongxiang_16/day17/ceshi0011/dash
		pathnew = os.path.join(path2,i)		
		if i != "dd":
			# add(路径,文件/文件夹)
			tf.add(pathnew,i)
			

  

转载于:https://www.cnblogs.com/huangjiangyong/p/10920536.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值