python解壓壓縮包的幾種方法

2021-09-17 00:01:29 字數 3390 閱讀 4411

這裡討論使用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之間的各種比較,可見: 

gz由於gz一般只壓縮乙個檔案,所有常與其他打包工具一起工作。比如可以先用tar打包為***.tar,然後在壓縮為***.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

***.tar.gz解壓後得到***.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。

解壓到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

#!/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解壓壓縮包的幾種方法

這裡討論使用python解壓如下五種壓縮檔案 gz tar tgz zip rar gz 即gzip,通常只能壓縮乙個檔案。與tar結合起來就可以實現先打包,再壓縮。tar linux系統下的打包工具,只打包,不壓縮 tgz 即tar.gz。先用tar打包,然後再用gz壓縮得到的檔案 zip 不同於...

python解壓壓縮包的幾種方法

這裡討論使用python解壓例如以下五種壓縮檔案 gz tar tgz zip rar gz 即gzip。通常僅僅能壓縮乙個檔案。與tar結合起來就能夠實現先打包,再壓縮。tar linux系統下的打包工具。僅僅打包。不壓縮 tgz 即tar.gz。先用tar打包,然後再用gz壓縮得到的檔案 zip...

python解壓壓縮包的幾種方法

這裡討論使用python解壓例如以下五種壓縮檔案 gz tar tgz zip rar gz 即gzip。通常僅僅能壓縮乙個檔案。與tar結合起來就能夠實現先打包,再壓縮。tar linux系統下的打包工具。僅僅打包。不壓縮 tgz 即tar.gz。先用tar打包,然後再用gz壓縮得到的檔案 zip...