zoukankan      html  css  js  c++  java
  • Python ---- tarfile && zipfile 压缩及打包

    感觉使用Python压缩是不是更方便点儿啊,现在都魔怔了,就用"ipython"替代命令行了都(哈哈哈哈)

    tarfile:

    tarfile不得不说真的很好用,感觉比“Linux”上的“tar”命令好用(不过我还是很热爱Linux的,嘻嘻.)

    Python的tarfile标准库提供了tar命令提供的功能,我们可以使用它来创建或读取一个tar文件;

    1. 创建tar包

    In [1] import tarfile, os
    In [2] with tarfile.open('new.tar','w') as f:
        ...:     for file in os.listdir('.'):
        ...:         f.add(file)

    2. 读取tar包(查看tar包中文件)

    In [3]: with tarfile.open('test.tar') as out: 
       ...:     for name in out.getnames(): 
       ...:         print(name) 

    2.2 读取tar包(打开tar包)

    In [4]: with tarfile.open('test.tar') as out: 
       ...:     out.extractall()

    3. 创建压缩包(gzip)

    tarfile不支持创建zip格式的压缩包,所以有了zipfile这个模块,这个都看习惯吧,其实我比较习惯用gzip;

     1. 创建一个用gzip算法压缩的tar包

    In [4]: with tarfile.open('dir1.tar.gz','w:gz') as f: 
       ...:     f.add('dir1')    # 图中为dir1的目录结构,自动将子目录及子目录下的所有文件都打进了gzip包中(这个非常好)

    2. 读取一个用gzip算法压缩的tar包

    a) # 获取压缩包中的文件名及绝对路径
    In [5]: with tarfile.open('dir1.tar.gz','r:gz') as out: ...: for name in out.getnames(): ...: print(name)

     b) # 解压gzip压缩包

    In [6]: with tarfile.open('dir1.tar.gz','r:gz') as out: 
       ...:     out.extractall()

     zipfile:

    当我们要将文件或目录压缩为zip格式的时候或我们要讲zip格式的文件解压的时候需要用到zipfile模块

    1.创建zip文件

    In [7]: import zipfile
       ...:  newzip = zipfile.ZipFile('new.zip','w')
       ...:  newzip.write('a.txt')
       ...:  newzip.close()

    2. 读取zip文件(展示zip文件中的文件列表)

    In [7]: newzip = zipfile.ZipFile('new.zip')
       ...:   newzip.namelist()

    3.读取zip文件(解压)

    In [7]: newzip = zipfile.ZipFile('new.zip')
       ...:   newzip.extractall()

    案例:压缩/root目录下的所有文件(包括子目录及子目录下的文件)

    zipfile有一种情况就是如果被压缩的目标是一个目录,且这个目录下还有子目录,同时也要压缩子目录的文件的情况下就需要与循环一起用,

    默认不会主动压缩

    #!/usr/bin/python3
    
    import os, zipfile, sys
    
    def zip_file(zipname, dirs=[]):
        newzip = zipfile.ZipFile(zipname,'w')
        if os.path.isdir(dirs):
           for root,dirs,files in os.walk(dirs):
               for file in files:
                   newzip.write(os.path.join(root,file))
           print('compressing!')
           newzip.close()
        else:
           print("{0} is not directory.".format(dirs))
           sys.exit(2)
    
    
    def main():
        sys.argv.append("")
        zipname = sys.argv[1]
        dirs = sys.argv[2]
        print(zipname)
        zip_file(zipname,dirs)
    
    if __name__ == "__main__":
       main()

  • 相关阅读:
    WCF 第二章 契约 异步访问服务操作
    WCF 第一章 基础 在IIS中寄宿服务
    哈希表 解释 和 实现
    ACM2010省赛总结
    hashTable实现
    c# winform 应用编程代码总结 14
    徽文化让世博更多彩
    c# winform 应用编程代码总结 15
    Socket用法详解
    IE插件技术 BHO C# IE 插件
  • 原文地址:https://www.cnblogs.com/k-free-bolg/p/12887635.html
Copyright © 2011-2022 走看看