tarfile 模組



“tar” 實用程式最初是為 UNIX 作業系統引入的。它的目的是將多個檔案收集到一個單獨的歸檔檔案中,通常稱為 tarball,這使得分發檔案變得容易。Python 標準庫的 tarfile 模組中的函式有助於根據需要建立 tar 歸檔檔案和從 tarball 中提取檔案。歸檔檔案可以使用 gzip、bz2 和 lzma 壓縮或根本不進行壓縮。

此模組中定義的 open() 函式用於寫入 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:'

獨佔建立 tarfile,不進行壓縮。

7

'x:gz'

使用 gzip 壓縮建立 tarfile。

8

'x:bz2'

使用 bzip2 壓縮建立 tarfile。

9

'x:xz'

使用 lzma 壓縮建立 tarfile。

10

'a' 或 'a:'

開啟以進行追加,不進行壓縮。

11

'w' 或 'w:'

開啟以進行無壓縮寫入。

12

'w:gz'

開啟以進行 gzip 壓縮寫入。

13

'w:bz2'

開啟以進行 bzip2 壓縮寫入。

14

'w:xz'

開啟以進行 lzma 壓縮寫入。

該模組定義了 TarFile 類。可以使用建構函式呼叫而不是 open() 函式來例項化 TarFile 物件。

TarFile() 方法

此建構函式還需要檔名和 mode 引數。mode 引數的可能值如上所述。

此類中的其他方法如下所示:

add() 方法

此方法將檔案新增到歸檔檔案中。該方法需要一個名稱,可以是檔案、目錄、符號連結、快捷方式等的名稱。預設情況下,目錄會遞迴新增。要防止遞迴新增,請將 recursive 引數設定為 False。

addfile() 方法

此方法將 TarInfo 物件新增到歸檔檔案中。

extractall() 方法

如果未顯式提供其他路徑,此方法會將存檔中的所有成員提取到當前路徑。

extract() 方法

此方法將指定的成員提取到給定的路徑,預設是當前路徑。

以下示例開啟一個使用 gzip 演算法壓縮的 tar 檔案,並在其中新增一個檔案。

import tarfile

fp=tarfile.open("zen.tar.gz","w:gz")
fp.add("zen.txt")
fp.close()

假設 'zen.txt' 檔案存在於當前工作目錄中,它將被新增到 'zen.tar.gz' 檔案中。

以下程式碼從 tar 存檔中提取檔案,並提取所有檔案(在本例中只有一個),並將它們放在當前資料夾中。為了驗證結果,您可以刪除或重新命名當前資料夾中的 'zen.txt' 檔案。

import tarfile

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:\python311 >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:\python311>python -m tarfile -e line.tar newdir/

以下命令列將列出 tar 存檔中的所有檔案。

C:\python311>python -m tarfile -l files.tar
python_data_compression.htm
廣告