Python:如何使用shutil.make_archive?

use*_*204 9 python zip shutil

我不知道如何使用shutil.make_archive将文件夹压缩为 zip 文件,然后将该saved_20170721.zip文件放入名为的文件夹中past_data

我有代码:

from shutil   import make_archive
from datetime import datetime

folderpath_to_zip_up = 'c:\my_work\todays_data'                    # I wanna zip up this folder
folderpath_archive   = 'c:\past_data'                              # And put it into here as file
filename             = 'saved_{:%Y-%m-%d}'.format(datetime.now())    

make_archive(filename, 'zip', folderpath_archive, folderpath_to_zip_up)
Run Code Online (Sandbox Code Playgroud)

我的目标是'c:\past_data'看起来像:

past_data---+ saved_20170721.zip
            + saved_20170722.zip
            + saved_20170723.zip
            + saved_20170724.zip
Run Code Online (Sandbox Code Playgroud)

但我无法理解文档,并且不断得到奇怪的结果。

sea*_*han 11

我遇到了同样的问题,发现 Shutil.make_archive 的文档非常密集且违反直觉。

我最终得到了它并编写了一个函数来帮助我,因为我永远无法第一次就做好它。

import os, shutil
def make_archive(source, destination):
        base = os.path.basename(destination)
        name = base.split('.')[0]
        format = base.split('.')[1]
        archive_from = os.path.dirname(source)
        archive_to = os.path.basename(source.strip(os.sep))
        shutil.make_archive(name, format, archive_from, archive_to)
        shutil.move('%s.%s'%(name,format), destination)

make_archive('/path/to/folder', '/path/to/folder.zip')
Run Code Online (Sandbox Code Playgroud)

希望它有帮助..我在这里也有一篇关于它的博客文章

http://www.seanbehan.com/how-to-use-python-shutil-make_archive-to-zip-up-a-directory-recursively-include-the-root-folder/

  • 如果您只是将目的地作为“make_archive”的第一个参数,则不需要最终调用“move”。从当前文档:https://docs.python.org/3/library/shutil.html#shutil.make_archive —“base_name 是要创建的文件的名称,包括路径...” (5认同)