使用Python (tarfile) 讀取和寫入tar存檔檔案
‘tar’ 實用程式最初是為 UNIX 作業系統引入的。其目的是將多個檔案收集到單個存檔檔案中,通常稱為 tarball,這使得分發檔案變得容易。Python 標準庫中的 tarfile 模組中的函式有助於根據需要建立 tar 存檔和從 tarball 中提取檔案。存檔可以使用 gzip、bz2 和 lzma 壓縮,也可以完全不壓縮。
此模組中定義的主要函式是 main(),使用它可以完成寫入 tar 檔案或從中讀取的操作。
Open()
此函式返回與作為引數提供給它的檔名相對應的 TarFile 物件。該函式需要另一個名為 mode 的引數,預設為 'r',表示不壓縮。其他模式如下所示:
| 序號 | 模式及操作 |
|---|---|
| 1 | 'r' 或 'r:*' 以透明壓縮方式開啟以進行讀取。 |
| 2 | 'r:' 開啟以讀取,不壓縮。 |
| 3 | 'r:gz' 開啟以使用 gzip 壓縮排行讀取。 |
| 4 | 'r:bz2' 開啟以使用 bzip2 壓縮排行讀取。 |
| 5 | 'r:xz' 開啟以使用 lzma 壓縮排行讀取。 |
| 6 | 'x' 或 'x:' 獨佔建立 tar 檔案,不壓縮。 |
| 7 | 'x:gz' 建立使用 gzip 壓縮的 tar 檔案。 |
| 8 | 'x:bz2' 建立使用 bzip2 壓縮的 tar 檔案。 |
| 9 | 'x:xz' 建立使用 lzma 壓縮的 tar 檔案。 |
| 10 | 'a' 或 'a:' 開啟以進行追加,不壓縮。 |
| 11 | 'w' 或 'w:' 開啟以進行無壓縮寫入。 |
| 12 | 'w:gz' 開啟以進行 gzip 壓縮寫入。 |
| 13 | 'w:bz2' 開啟以進行 bzip2 壓縮寫入。 |
| 14 | 'w:xz' 開啟以進行 lzma 壓縮寫入。 |
該模組定義了 TarFile 類。可以呼叫建構函式來例項化 TarFile 物件,而不是 open() 函式。
TarFile()
此建構函式也需要檔名和 mode 引數。mode 引數的可能值如上所示。
此類中的其他方法如下:
add()
此方法將檔案新增到存檔中。該方法需要一個名稱,可以是檔案、目錄、符號連結、快捷方式等的名稱。預設情況下,目錄會遞迴新增。要防止遞迴新增,請將 recursive 引數設定為 False。
addfile()
此方法將 TarInfo 物件新增到存檔中。
extractall()
如果未明確提供其他路徑,此方法會將存檔的所有成員提取到當前路徑中。
extract()
此方法將指定的成員提取到給定的路徑,預設為當前路徑。
以下示例開啟一個使用 gzip 演算法進行壓縮的 tar 檔案,並在其中新增一個檔案。
>>> fp = tarfile.open("zen.tar.gz","w:gz")
>>> fp.add("zen.txt")
>>> fp.close()假設 'zen.txt' 檔案存在於當前工作目錄中,它將被新增到 'zen.tar.gz' 檔案中。
以下程式碼從 tar 存檔中提取檔案,並提取所有檔案(在本例中只有一個檔案),並將它們放入當前資料夾中。為了驗證結果,您可以刪除或重新命名當前資料夾中的 'zen.txt'。
>>> fp = tarfile.open("zen.tar.gz","r:gz")
>>> fp.extractall()
>>> fp.close()您會發現 'zen.txt' 檔案將出現在當前目錄中。
要建立一個包含當前目錄中所有檔案的 tar 檔案,請使用以下程式碼:
import tarfile, glob
>>> fp=tarfile.open('file.tar','w')
>>> for file in glob.glob('*.*'):
fp.add(file)
>>> fp.close()命令列介面
tar 檔案的建立和提取可以透過命令列介面實現。例如,透過在命令視窗中執行以下命令,將 'lines.txt' 檔案新增到 tar 檔案中:
C:\python36 >python -m tarfile -c line.tar lines.txt
可以使用以下命令列選項。
| -l 或 --list | 列出 tar 檔案中的檔案。 |
| -c 或 --create | 從原始檔建立 tar 檔案。 |
| -e 或 --extract | 如果未指定 output_dir,則將 tar 檔案提取到當前目錄。 |
| -t 或 --test | 測試 tar 檔案是否有效。 |
| -v 或 --verbose | 詳細輸出。 |
以下命令列將在當前目錄下的 newdir 資料夾中提取 line.tar。
C:\python36>python -m tarfile -e line.tar newdir/
以下命令列將列出 tar 存檔中的所有檔案。
C:\python36>python -m tarfile -l files.tar
本文介紹了 tarfile 模組中定義的類和函式。
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP