zoukankan      html  css  js  c++  java
  • python解压压缩包的几种方式

    这里讨论使用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方法如下:

    [python] view plain copy
     
    1. import gzip  
    2. import os  
    3. def un_gz(file_name):  
    4.     """ungz zip file"""  
    5.     f_name = file_name.replace(".gz", "")  
    6.     #获取文件的名称,去掉  
    7.     g_file = gzip.GzipFile(file_name)  
    8.     #创建gzip对象  
    9.     open(f_name, "w+").write(g_file.read())  
    10.     #gzip对象用read()打开后,写入open()建立的文件中。  
    11.     g_file.close()  
    12.     #关闭gzip对象  

    tar

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

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

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

    [python] view plain copy
     
    1. import tarfile  
    2. def un_tar(file_name):  
    3.        untar zip file"""  
    4.     tar = tarfile.open(file_name)  
    5.     names = tar.getnames()  
    6.     if os.path.isdir(file_name + "_files"):  
    7.         pass  
    8.     else:  
    9.         os.mkdir(file_name + "_files")  
    10.     #由于解压后是许多文件,预先建立同名文件夹  
    11.     for name in names:  
    12.         tar.extract(name, file_name + "_files/")  
    13.     tar.close()  


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

     

     

    zip

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

    [python] view plain copy
     
    1. import zipfile  
    2. def un_zip(file_name):  
    3.     """unzip zip file"""  
    4.     zip_file = zipfile.ZipFile(file_name)  
    5.     if os.path.isdir(file_name + "_files"):  
    6.         pass  
    7.     else:  
    8.         os.mkdir(file_name + "_files")  
    9.     for names in zip_file.namelist():  
    10.         zip_file.extract(names,file_name + "_files/")  
    11.     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

    安装完成。

    [python] view plain copy
     
    1. import rarfile  
    2. import os  
    3. def un_rar(file_name):  
    4.     """unrar zip file"""  
    5.     rar = rarfile.RarFile(file_name)  
    6.     if os.path.isdir(file_name + "_files"):  
    7.         pass  
    8.     else:  
    9.         os.mkdir(file_name + "_files")  
    10.     os.chdir(file_name + "_files"):  
    11.     rar.extractall()  
    12.     rar.close()  



     

    tar打包
    在写打包代码的过程中,使用tar.add()增加文件时,会把文件本身的路径也加进去,加上arcname就能根据自己的命名规则将文件加入tar包
    打包代码:
    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解包也可以根据不同压缩格式来解压。
    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包内文件过多,小心内存哦~
    1. tar = tarfile.open(filename, 'r:gz')  
    2. for tar_info in tar:  
    3.     file = tar.extractfile(tar_info)  
    4.     do_something_with(file)  

    这里讨论使用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方法如下:

    [python] view plain copy
     
    1. import gzip  
    2. import os  
    3. def un_gz(file_name):  
    4.     """ungz zip file"""  
    5.     f_name = file_name.replace(".gz", "")  
    6.     #获取文件的名称,去掉  
    7.     g_file = gzip.GzipFile(file_name)  
    8.     #创建gzip对象  
    9.     open(f_name, "w+").write(g_file.read())  
    10.     #gzip对象用read()打开后,写入open()建立的文件中。  
    11.     g_file.close()  
    12.     #关闭gzip对象  

    tar

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

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

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

    [python] view plain copy
     
    1. import tarfile  
    2. def un_tar(file_name):  
    3.        untar zip file"""  
    4.     tar = tarfile.open(file_name)  
    5.     names = tar.getnames()  
    6.     if os.path.isdir(file_name + "_files"):  
    7.         pass  
    8.     else:  
    9.         os.mkdir(file_name + "_files")  
    10.     #由于解压后是许多文件,预先建立同名文件夹  
    11.     for name in names:  
    12.         tar.extract(name, file_name + "_files/")  
    13.     tar.close()  


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

     

     

    zip

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

    [python] view plain copy
     
    1. import zipfile  
    2. def un_zip(file_name):  
    3.     """unzip zip file"""  
    4.     zip_file = zipfile.ZipFile(file_name)  
    5.     if os.path.isdir(file_name + "_files"):  
    6.         pass  
    7.     else:  
    8.         os.mkdir(file_name + "_files")  
    9.     for names in zip_file.namelist():  
    10.         zip_file.extract(names,file_name + "_files/")  
    11.     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

    安装完成。

    [python] view plain copy
     
    1. import rarfile  
    2. import os  
    3. def un_rar(file_name):  
    4.     """unrar zip file"""  
    5.     rar = rarfile.RarFile(file_name)  
    6.     if os.path.isdir(file_name + "_files"):  
    7.         pass  
    8.     else:  
    9.         os.mkdir(file_name + "_files")  
    10.     os.chdir(file_name + "_files"):  
    11.     rar.extractall()  
    12.     rar.close()  



     

    tar打包
    在写打包代码的过程中,使用tar.add()增加文件时,会把文件本身的路径也加进去,加上arcname就能根据自己的命名规则将文件加入tar包
    打包代码:
    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解包也可以根据不同压缩格式来解压。
    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包内文件过多,小心内存哦~

    1. tar = tarfile.open(filename, 'r:gz')  
    2. for tar_info in tar:  
    3.     file = tar.extractfile(tar_info)  
    4.     do_something_with(file)  
  • 相关阅读:
    LintCode "Maximum Gap"
    LintCode "Wood Cut"
    LintCode "Expression Evaluation"
    LintCode "Find Peak Element II"
    LintCode "Remove Node in Binary Search Tree"
    LintCode "Delete Digits"
    LintCode "Binary Representation"
    LeetCode "Game of Life"
    LintCode "Coins in a Line"
    LintCode "Word Break"
  • 原文地址:https://www.cnblogs.com/ouyang99-/p/11277681.html
Copyright © 2011-2022 走看看