簡體   English   中英

Python:如何使用tarfile模塊中不可用的不同壓縮方法,創建tar文件並使用外部模塊動態壓縮它?

[英]Python: how to create tar file and compress it on the fly with external module, using different compression methods not available in tarfile module?

我正在嘗試建立一個代碼,將幾個大文件(從幾十到幾百GB)打包到一個檔案中。 對於如此大量的數據,tarfile模塊中支持的壓縮方法有些慢,因此我想使用一些外部壓縮模塊(例如lz4)來獲得更好的壓縮速度。 不幸的是,我找不到一種方法來創建tar文件並即時使用lz4壓縮它,以避免創建臨時tar文件。 tarfile模塊的文檔說,有一種方法可以打開未壓縮的流以使用'w |'進行寫入。 模式。 是否可以將tar文件直接流式傳輸到lz4模塊? 如果是這樣,使用它的正確方法是什么? 非常感謝你。

根據我們上面的談話。

import tarfile
import subprocess

p = subprocess.Popen(['lz4', '-'], stdin=subprocess.PIPE)

tar = tarfile.open(fileobj=p.stdin, mode="w|")

從那里可以執行常規的tar.addfile 僅供參考:正如我在對話中所說。 GNU tar可以自動檢測gz和bz2,但不能自動檢測lz4。 請注意。 因此,您必須執行lz4 -c -d stdin.lz4 | tar xf - lz4 -c -d stdin.lz4 | tar xf -提取文件。 如果僅執行tar xf ,它將失敗。

您可以將tar命令的結果直接傳送到lz4實用程序。 這將避免使用任何中間文件。 這是一個示例(假設您在系統上同時安裝了tarlz4 ):

tar cvf - * | lz4 > mypack.tar.lz4

-這里講述輸出從結果tarstdout 當然,您可以使用要壓縮的目標更改*

反向操作也是可能的:

lz4 -d mypack.tar.lz4 | tar xv

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM