如何压缩整个目录的内容?

时间:2017-12-07 22:29:56

标签: python python-2.7

我使用python 2.7并尝试归档目录: 目标是:归档整个文件夹的内容 subject:C:\ User \ blah \ blah \ parentfolder

structure:C...parentfolder\ 1.docx
                            2.xlxs
                            4.pdf
                            subfolder\5.pdf
                                      6.txt

现在我知道shutil.make_archive()可以压缩我的文件夹,但事实证明是这样的

C:\\User\\blah\\blah\\zipfile_name\\parentfolder\ 1.docx
                                                  2.xlxs
                                                  4.pdf
                                                  subfolder\5.pdf
                                                            6.txt 

但是我希望跳过zipfile_name文件夹中的父文件夹层,即:(这是问题不同的地方,我确实从该问题中学习了shutil.make_archive,但是当我打开时在shutil模块中,我发现make_archive有四个入口。我不知道是什么让它们与众不同并且使用了四个输入的那个,那就是我的问题。前一个没有没有指出为什么它只使用了三个输入,而其他答案都使用了非常复杂的自定义函数左右。我在这个问题中选择的答案比较并解释了差异,我非常欣赏。作为一个非计算机科学专业,我认为这种细节可以帮助很多人。)

C:\\User\\blah\\blah\\zipfile_name\\ 1.docx
                                     2.xlxs
                                     4.pdf
                                     subfolder\5.pdf
                                               6.txt 

如果我使用os.path.walk等将每个文件写入zipfile_name,它似乎会非常复杂,因为我需要首先1.列出文件夹中的所有内容 - 而:1文件? - -write到zip文件夹while:0目录? - make_directory,并列出所有项目,然后再循环这个过程(直到最后一个目录中没有目录)

另外,我不知道如何在.zip文件夹中创建目录。所以这一切看起来都很复杂。

那么有没有办法在保留文件夹结构的同时将文件夹更改为存档文件夹?

1 个答案:

答案 0 :(得分:1)

这只是关于如何在parentfolder参数中传递make_archive文件夹的信息。

考虑以下两个例子:

shutil.make_archive('myarchive', 'zip', '/User/blah/blah', 'parentfolder')

这将创建zip存档myarchive.zip。如果您打开myarchive.zip,您将首先看到文件夹parentfolder,如果您打开该文件夹,您将看到存档所在的原始parentfolder的内容。

shutil.make_archive('myarchive', 'zip', '/User/blah/blah/parentfolder')

这将创建zip存档myarchive.zip。如果您打开myarchive.zip,您将立即看到存档的原始parentfolder的内容。文件夹名称parentfolder不会显示在存档中。

参数记录在https://docs.python.org/2/library/shutil.html中,但老实说,我不容易看到上面描述的行为记录在哪里。我通过反复试验找到了它 (Windows上的Python 2.7.14)。