python解壓壓縮包的幾種方法

2021-09-09 02:28:33 字數 4039 閱讀 5734

這裡討論使用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一般僅僅壓縮乙個檔案,全部常與其它打包工具一起工作。比方能夠先用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.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檔案同樣的解壓方法。

與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通常為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  

在打包的過程中能夠設定壓縮規則,如想要以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:'

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

這裡討論使用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 不...