• 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)
    			
    

      

  • 相关阅读:
    HDU 5338(ZZX and Permutations-用线段树贪心)
    编程之美-活动中心(三分)
    form的method用get导致中文乱码
    Tomcat: Could not clean server of obsolete files
    Eclipse打开javadoc框
    Java EE各种documentation
    web-project的/WEB-INF/lib
    在jsp里面不要瞎用<!-- -->注释
    [流水账]搜索与web-container版本匹配的jar包
    session的创建与销毁
  • 原文地址:https://www.cnblogs.com/huangjiangyong/p/10920536.html
Copyright © 2020-2023  润新知