zoukankan      html  css  js  c++  java
  • 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)
    			
    

      

  • 相关阅读:
    2021.02.09 【ABAP随笔】-Excel高效输出工具-xlsx workbench-输出多个Sheet
    2021.02.07 【ABAP随笔】-Excel高效输出工具-xlsx workbench
    Thrift did not exit cleanly
    Docker部署Springboot项目,Invalid or corrupt jarfile /app.jar
    为jenkins设置nginx作为反向代理
    Jenkins安装报错 No valid crumb was included in request
    判断当前设备是ios还是安卓
    vue 路由跳转四种方式 (带参数)
    Vue table的column属性,render函数生成switch开关和button按钮
    H5页面自定义 pxTorem 函数进行单位转换
  • 原文地址:https://www.cnblogs.com/huangjiangyong/p/10920536.html
Copyright © 2011-2022 走看看