![](/img/trans.png)
[英]How to create a folder and then file in tar using tarfile module of python
[英]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
實用程序。 這將避免使用任何中間文件。 這是一個示例(假設您在系統上同時安裝了tar
和lz4
):
tar cvf - * | lz4 > mypack.tar.lz4
的-
這里講述輸出從結果tar
到stdout
。 當然,您可以使用要壓縮的目標更改*
。
反向操作也是可能的:
lz4 -d mypack.tar.lz4 | tar xv
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.