繁体   English   中英

如何将多个文件夹递归压缩为单个.zip文件?

[英]How to recursively zip multiple folders as individual .zip files?

我有一组文件夹(名为* .pages),我想将其压缩为各自的.zip文件,例如,将“ example1.pages”压缩为“ example1.pages.zip”,将“ example2.pages”压缩为“ example2.pages” .zip”等。我也想包括单个.pages文件夹的内容。

当前,该脚本将所有.pages文件压缩到具有嵌套目录的单个文件中。

我不确定如何继续,我相信执行zipfile函数时会丢失某些内容。

任何帮助将不胜感激!

import os
import zipfile

start_path = "MY/DIRECTORY/HERE"

def zipdir(ziph):
    dir_count = 0
    file_count = 0
    for (path,dirs,files) in os.walk(start_path):
        print('Directory: {:s}'.format(path))
        dir_count += 1

        for file in dirs:
            if file.endswith(".pages"): 
                print('\nAttempting to zip: \'{}\''.format(file))

                ziph.write(os.path.join(path, file))

                print('Done')
                file_count += 1

    print('\nProcessed {} files in {} directories.'.format(file_count,dir_count))    



if __name__ == '__main__':
    zipf = zipfile.ZipFile("NAME/OF/INDIVIDUAL/ZIP/FILE.zip", 'w', zipfile.ZIP_DEFLATED)
    zipdir(zipf)
    zipf.close()

您只打开一个zip文件并在其中添加所有内容。 如果要每个文件一个zip,则需要在扫描文件时在循环中创建zip文件。

import os
import zipfile

start_path = "MY/DIRECTORY/HERE"
start_path = '.'

def zipdir(start_path):
    dir_count = 0
    file_count = 0
    for (path,dirs,files) in os.walk(start_path):
        print('Directory: {:s}'.format(path))
        dir_count += 1
        for file in files:
            if file.endswith(".pages"): 
                file_path = os.path.join(path, file)
                print('\nAttempting to zip: \'{}\''.format(file_path))
                with zipfile.ZipFile(file_path + '.zip', 'w', zipfile.ZIP_DEFLATED) as ziph:
                    ziph.write(file_path, file)
                print('Done')
                file_count += 1

    print('\nProcessed {} files in {} directories.'.format(file_count,dir_count))

if __name__ == '__main__':
    zipdir(start_path)

您还可以通过@tdelaney采用代码,并按如下所示使用shutil模块:

enter import os
import shutil

reports_path  = os.getcwd()

def zipdir(reports_path):
for (path,dirs,files) in os.walk(reports_path):

    for d in dirs:
        file_path = os.path.join(path, d)
        print 'Compressing ' + d  
        shutil.make_archive(d,'zip',file_path)
        print "Done"

if __name__ == '__main__':
    zipdir(reports_path)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM