zoukankan      html  css  js  c++  java
  • python 解压 压缩包

    转 http://m.blog.csdn.net/blog/wice110956/26597179#

    这里讨论使用Python解压如下五种压缩文件:

    .gz .tar  .tgz .zip .rar

    简介

    gz: 即gzip,通常只能压缩一个文件。与tar结合起来就可以实现先打包,再压缩。

    tar: linux系统下的打包工具,只打包,不压缩

    tgz:即tar.gz。先用tar打包,然后再用gz压缩得到的文件

    zip: 不同于gzip,虽然使用相似的算法,可以打包压缩多个文件,不过分别压缩文件,压缩率低于tar。

    rar:打包压缩文件,最初用于DOS,基于window操作系统。压缩率比zip高,但速度慢,随机访问的速度也慢。

    关于zip于rar之间的各种比较,可见: 

    http://www.comicer.com/stronghorse/water/software/ziprar.htm

    gz

    由于gz一般只压缩一个文件,所有常与其他打包工具一起工作。比如可以先用tar打包为XXX.tar,然后在压缩为XXX.tar.gz

    解压gz,其实就是读出其中的单一文件,Python方法如下:

    import gzip
    import os
    def un_gz(file_name):
        """ungz zip file"""
        f_name = file_name.replace(".gz", "")
        #获取文件的名称,去掉
        g_file = gzip.GzipFile(file_name)
        #创建gzip对象
        open(f_name, "w+").write(g_file.read())
        #gzip对象用read()打开后,写入open()建立的文件中。
        g_file.close()
        #关闭gzip对象<span style="font-family: Arial, Helvetica, sans-serif; "> </span>

    tar

    XXX.tar.gz解压后得到XXX.tar,还要进一步解压出来。

    *注:tgz与tar.gz是相同的格式,老版本DOS扩展名最多三个字符,故用tgz表示。

    由于这里有多个文件,我们先读取所有文件名,然后解压,如下:

    import tarfile
    def un_tar(file_name):
           untar zip file"""
        tar = tarfile.open(file_name)
        names = tar.getnames()
        if os.path.isdir(file_name + "_files"):
            pass
        else:
            os.mkdir(file_name + "_files")
        #由于解压后是许多文件,预先建立同名文件夹
        for name in names:
            tar.extract(name, file_name + "_files/")
        tar.close()

    *注:tgz文件与tar文件相同的解压方法。

    zip

    与tar类似,先读取多个文件名,然后解压,如下:

    import zipfile
    def un_zip(file_name):
        """unzip zip file"""
        zip_file = zipfile.ZipFile(file_name)
        if os.path.isdir(file_name + "_files"):
            pass
        else:
            os.mkdir(file_name + "_files")
        for names in zip_file.namelist():
            zip_file.extract(names,file_name + "_files/")
        zip_file.close()

    rar

    因为rar通常为window下使用,需要额外的Python包rarfile。

    可用地址: http://sourceforge.net/projects/rarfile.berlios/files/rarfile-2.4.tar.gz/download 

    解压到Python安装目录的/Scripts/目录下,在当前窗口打开命令行,

    输入Python setup.py install

    安装完成。

    import rarfile
    import os
    def un_rar(file_name):
        """unrar zip file"""
        rar = rarfile.RarFile(file_name)
        if os.path.isdir(file_name + "_files"):
            pass
        else:
            os.mkdir(file_name + "_files")
        os.chdir(file_name + "_files"):
        rar.extractall()
        rar.close()




    tar打包
    在写打包代码的过程中,使用tar.add()增加文件时,会把文件本身的路径也加进去,加上arcname就能根据自己的命名规则将文件加入tar包
    打包代码:
    Python代码  收藏代码
    1. #!/usr/bin/env /usr/local/bin/python  
    2.  # encoding: utf-8  
    3.  import tarfile  
    4.  import os  
    5.  import time  
    6.   
    7.  start = time.time()  
    8.  tar=tarfile.open('/path/to/your.tar,'w')  
    9.  for root,dir,files in os.walk('/path/to/dir/'):  
    10.          for file in files:  
    11.                  fullpath=os.path.join(root,file)  
    12.                  tar.add(fullpath,arcname=file)  
    13.  tar.close()  
    14.  print time.time()-start  
     
     
    在打包的过程中可以设置压缩规则,如想要以gz压缩的格式打包
    tar=tarfile.open('/path/to/your.tar.gz','w:gz')
    其他格式如下表:
    tarfile.open的mode有很多种:
    mode action
    'r' or 'r:*' Open for reading with transparent compression (recommended).
    'r:' Open for reading exclusively without compression.
    'r:gz' Open for reading with gzip compression.
    'r:bz2' Open for reading with bzip2 compression.
    'a' or 'a:' Open for appending with no compression. The file is created if it does not exist.
    'w' or 'w:' Open for uncompressed writing.
    'w:gz' Open for gzip compressed writing.
    'w:bz2' Open for bzip2 compressed writing.
     
    tar解包
    tar解包也可以根据不同压缩格式来解压。
    Python代码  收藏代码
    1. #!/usr/bin/env /usr/local/bin/python  
    2.  # encoding: utf-8  
    3.  import tarfile  
    4.  import time  
    5.   
    6.  start = time.time()  
    7.  t = tarfile.open("/path/to/your.tar", "r:")  
    8.  t.extractall(path = '/path/to/extractdir/')  
    9.  t.close()  
    10.  print time.time()-start  
     
     
    上面的代码是解压所有的,也可以挨个起做不同的处理,但要如果tar包内文件过多,小心内存哦~
    Python代码  收藏代码
    1. tar = tarfile.open(filename, 'r:gz')  
    2. for tar_info in tar:  
    3.     file = tar.extractfile(tar_info)  
    4.     do_something_with(file)  
     
  • 相关阅读:
    【转】 测试人员的职业规划 --整理标注
    关于数据准备
    功能点算法及在软件测试中的应用
    MySQL常用命令大全
    Python学习笔记
    python 学习笔记 if语句
    一个男人关心的东西 决定了他的层次
    Oracle 计算两个时间的差值
    javascript对下拉列表框(select)的操作
    java需要掌握内容、核心不断更新中
  • 原文地址:https://www.cnblogs.com/hdu-edu/p/4471797.html
Copyright © 2011-2022 走看看