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)