1. 程式人生 > >用 Python 管理壓縮包

用 Python 管理壓縮包

管理 zip 壓縮包

讀取zip壓縮包內檔案列表

Python管理zip主要使用zipfile模組,這個模組裡有一個名為 ZipFile 的物件,我們通過將 zip 壓縮包的名稱傳遞給這個物件的函式,這樣就打開了一個 zip 壓縮包並獲得一個 ZipFile 的物件,然後使用這個物件的方法去讀取 zip 壓縮包裡的內容。具體如下所示:

import zipfile
first_zip = zipfile.ZipFile('test.zip')
file_list = first_zip.namelist()
print(file_list)

namelist() 是 ZipFile 中的常用方法,除此以外比較常用的方法還有 extract,extractall:

  • namelist:返回一個列表,列表中是 zip 中包含的所有檔案和資料夾;
  • extract:從 zip 中提取單個檔案
  • extarctall:從 zip 檔案中提取所有檔案

建立zip壓縮包

如果想要建立一個zip格式的壓縮檔案,必須要以「寫」的模式開啟 zip 檔案,可以是w或a

import zipfile
my_zip = zipfile.ZipFile('test2.zip', 'w')
my_zip.write('serilizer.py')
my_zip.close() 

上面的程式碼是建立了一個名為test2.zip的新zip壓縮包,壓縮包裡包含serilizer.py這個問題件,注意,如果同名壓縮包已經存在,使用w模式會刪除壓縮包內原有的問題件,如果對已有壓縮包新增檔案的話可以使用a模式

管理tar包

tar 命令一般是在 Linux 系統中建立壓縮包,此外 tar 命令也可以建立一個不壓縮的 tar 包,僅僅是為了能把多個檔案進行打包便於傳輸。這也就是說,我們在使用 tar 命令的時候,既可以建立普通的 tar 包,也可以建立使用壓縮演算法壓縮過的壓縮包。

Python 中使用 tarfile 標準庫提供了 tar 命令提供的功能,我們也可以使用它建立一個壓縮或者一個非壓縮的 tar 包。

建立tar包

import tarfile
with tarfile.open('etc.tar', mode='w') as f:
    f.add('apps.py')

上面的程式碼中,由於我們是建立一個 tar 包,所以以「寫」模式開啟 tar 包並得到一個 TarFile 物件,然後使用 TarFile 物件的 add 方法將 test.py 檔案新增到 tar 包中。

讀取tar包的檔案列表

import tarfile
with tarfile.open('etc.tar') as t:
    for member in t.getmembers():
        print(member.name)

上面的程式碼中,匯入 tarfile 庫,使用預設的讀模式開啟 tar 包,tarfile.open() 函式返回一個 TarFile 物件,這個物件表示當前開啟的 tar 包,我們可以通過這個物件的方法操作和讀取 tar 包中的內容。

tarfile 中有不少函式,其中最常用的有 getnames,extract,extractall 函式:

  • getnames:獲取 tar 包中每個檔案的物件,是個列表;
  • extract:提取單個檔案;
  • extractall:提取所有檔案

tarfile 讀取和建立壓縮包

上面我們用 targfile 建立和讀取未壓縮的 tar 包,但是一般情況下,我們建立 tar 包的時候都會使用壓縮演算法進行壓縮,以加快傳輸速度和減少佔用的磁碟空間。

使用 tarfile 建立和讀取壓縮包非常簡單,只要在開啟檔案時指定壓縮演算法即可。對於 tarfile 的 open 函式,以「開啟模式:壓縮演算法」的形式開啟即可。具體如下所示:

建立一個用gzip演算法壓縮的tar包

import tarfile
with tarfile.open('etc.tar.gz', mode='w:gz') as f:
    f.add('apps.py')

讀取一個用gzip演算法壓縮的tar包

import tarfile
with tarfile.open('test.tar.gz', 'r:gz') as f:
    for member in f.getmembers():
        print(member.name)

參考連結
https://mp.weixin.qq.com/s/mic5BtABQYBxMCxvw6t3Bw