如何使用shutil创建特定文件夹的zip

时间:2014-10-13 12:18:18

标签: python zip

我正在尝试将特定目录的所有文件夹分别用它们各自的文件夹名称作为zip文件名压缩,就像winzip一样。我的代码如下:

folder_list = os.walk('.').next()[1] # bingo
print folder_list

for each_folder in folder_list:
    shutil.make_archive(each_folder, 'zip', os.getcwd())

但它正在做的是创建一个文件夹的zip并将该目录的所有其他文件和文件夹转储到zip文件中。请注意它正在为当前目录中的所有文件夹执行。
对此有任何帮助!!!

2 个答案:

答案 0 :(得分:1)

通过对 shutil 的更多研究,我现在能够使我的代码正常工作。以下是我的代码:

import os, shutil

#Get the list of all folders present within the particular directory
folder_list = os.walk('.').next()[1]

#Start zipping the folders
for each_folder in folder_list:
    shutil.make_archive(each_folder, 'zip', os.getcwd() + "\\" + each_folder)

答案 1 :(得分:0)

我不认为这是可能的。你可以看看来源。

特别是,在第683行,您可以看到如果您的Python具有zipfile模块,它显式传递compression = zipfile.ZIP_DEFLATED,而第635行的后备代码除了-r和-q之外没有传递任何参数。 zip命令行工具。

你可以尝试这个:

args = ['tar', '-zcf', dest_file_name, '-C', me_directory, '.']
res = subprocess.call(args)

如果你想获得目录列表,请使用一些写得很好的库:

for (root, directories, _) in os.walk(my_dir):
  for dir_name in directories:
     path_to_dir = os.path.join(root, dir_name)// don't make concat, like a+'//'+b, thats not enviroment saint