如何使用Python GZip模块压缩文件夹?

13

我正在创建Python软件,用于压缩文件/文件夹... 我该如何编写代码部分以要求用户输入文件夹位置并将其压缩?我目前已经有了单个文件的代码,但没有一整个文件夹的代码。请详细解释如何完成此操作。


3
gzip不是只用于压缩而不是归档吗?也许你应该考虑使用tar呢? - Manoj Govindan
4个回答

29

压缩文件夹成 tar 文件的代码如下:

import tarfile

tar = tarfile.open("TarName.tar.gz", "w:gz")
tar.add("folder/location", arcname="TarName")
tar.close()

这对我有效,希望对您也有用。


11

我不做界面设计,所以你需要自己让用户输入文件夹名称。这里提供一种压缩并打包成tar.gz文件的方法。它不会递归子文件夹,如果需要请使用os.walk()。

# assume the path to the folder to compress is in 'folder_path'

import tarfile
import os

with tarfile.open( folder_path + ".tgz", "w:gz" ) as tar:
    for name in os.listdir( folder_path ):
        tar.add(name)

2
实际上,您只需编写tar.add(folder_path),它将被递归添加。(当然,这可能是自此答案发布以来新增的新功能!)此外,除非您将tar = tarfile.open(...)更改为with tarfile.open(...)as tar:(这是个好主意),否则for循环不应在此处缩进,然后您可以摆脱tar.close()行。 - Jim Oldfield
1
谢谢,不确定那个缩进错误是如何存活了5年的。 - Russell Borogove
1
你不需要加上 tar.add(os.path.join(folder_path, name)) 吗? - rer

8
GZip不能对文件夹/目录进行压缩,只能压缩单个文件。请改用zipfile模块。

0
正如larsmans所说,gzip压缩不适用于目录,只适用于单个文件。在Linux中通常的做法是先将目录放入tarball中,然后再进行压缩。

1
值得一提的是,当您使用tar打包后再压缩时,可以获得比单独压缩每个文件更好的压缩效果。 - synthesizerpatel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接