簡體   English   中英

如何使用Python將tar文件保存在平面tar.gz中

[英]How to save tar file in flat tar.gz using Python

我有一個具有以下結構的tar文件:

example.tar
--file1
--file2

並且我想將文件另存為tar.gz,因此它將如下所示:

example.tar.gz
--file1
--file2

我試圖在tarfile模塊中使用TarFile.add() ,但是我只設法用另一個層次結構創建了tar.gz文件。

我設法只找到兩個解決方案,這似乎不是最佳選擇:

  1. “解壓縮”文件,然后將其放入新的“ tar.gz”文件中
  2. 從Python腳本gzip -c example.tar > example.tar.gz調用以下Unix命令

有沒有在Python中做的連擊方式?

tar.gz文件只是經過gzip tar文件。 如您所知,您編寫了以下Unix命令:

gzip -c example.tar > example.tar.gz

如果要在Python中執行相同的操作,只需使用gzip庫:

with open('example.tar', 'rb') as inf, gzip.open('example.tar.gz', 'wb') as outf:
    shutil.copyfileobj(inf, outf)

實際上,這直接等同於docs中的“用法示例”之一

這是最優的嗎?

  • 我們避免了無拘無束的局面。 這是非常簡單的工作( tar是一種簡陋的格式...),但不是零。
  • 顯然,我們必須讀取tarball的每個字節,而您必須寫入gzip壓縮tarball的每個字節,但是我們要避免一次讀取整個文件(這可能會耗盡您的所有RAM)或一次讀取的文件很少您無法保持磁盤移動。 copyfileobj為您解決了這一問題。

因此,它與gzip工具幾乎完全相同。 但是我們不是在創建子進程,也不在依賴可能不存在的工具(例如,在Windows或iOS上,或者在某些非常奇怪的情況下,您創建的chroot具有python但沒有gzip )。

暫無
暫無

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

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