這裏討論使用Python解壓以下五種壓縮文件:python
.gz .tar .tgz .zip .rarlinux
簡介
gz: 即gzip,一般只能壓縮一個文件。與tar結合起來就能夠實現先打包,再壓縮。ios
tar: linux系統下的打包工具,只打包,不壓縮算法
tgz:即tar.gz。先用tar打包,而後再用gz壓縮獲得的文件app
zip: 不一樣於gzip,雖然使用類似的算法,能夠打包壓縮多個文件,不過度別壓縮文件,壓縮率低於tar。工具
rar:打包壓縮文件,最初用於DOS,基於window操做系統。壓縮率比zip高,但速度慢,隨機訪問的速度也慢。spa
關於zip於rar之間的各類比較,可見: 操作系統
http://www.comicer.com/stronghorse/water/software/ziprar.htm.net
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對象
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包
打包代碼:
- #!/usr/bin/env /usr/local/bin/python
- # encoding: utf-8
- import tarfile
- import os
- import time
-
- start = time.time()
- tar=tarfile.open('/path/to/your.tar,'w')
- for root,dir,files in os.walk('/path/to/dir/'):
- for file in files:
- fullpath=os.path.join(root,file)
- tar.add(fullpath,arcname=file)
- tar.close()
- 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解包也能夠根據不一樣壓縮格式來解壓。
- #!/usr/bin/env /usr/local/bin/python
- # encoding: utf-8
- import tarfile
- import time
-
- start = time.time()
- t = tarfile.open("/path/to/your.tar", "r:")
- t.extractall(path = '/path/to/extractdir/')
- t.close()
- print time.time()-start
上面的代碼是解壓全部的,也能夠挨個起作不一樣的處理,但要若是tar包內文件過多,當心內存哦~
- tar = tarfile.open(filename, 'r:gz')
- for tar_info in tar:
- file = tar.extractfile(tar_info)
- 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方法以下:
- 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對象
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包
打包代碼:
- #!/usr/bin/env /usr/local/bin/python
- # encoding: utf-8
- import tarfile
- import os
- import time
-
- start = time.time()
- tar=tarfile.open('/path/to/your.tar,'w')
- for root,dir,files in os.walk('/path/to/dir/'):
- for file in files:
- fullpath=os.path.join(root,file)
- tar.add(fullpath,arcname=file)
- tar.close()
- 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解包也能夠根據不一樣壓縮格式來解壓。
- #!/usr/bin/env /usr/local/bin/python
- # encoding: utf-8
- import tarfile
- import time
-
- start = time.time()
- t = tarfile.open("/path/to/your.tar", "r:")
- t.extractall(path = '/path/to/extractdir/')
- t.close()
- print time.time()-start
上面的代碼是解壓全部的,也能夠挨個起作不一樣的處理,但要若是tar包內文件過多,當心內存哦~
- tar = tarfile.open(filename, 'r:gz')
- for tar_info in tar:
- file = tar.extractfile(tar_info)
- do_something_with(file)