Python的shutil.make_archive()在Windows上创建了dot目录

时间:2016-11-24 17:30:00

标签: python windows zip

使用shutil.make_archive('newarchive', 'zip', <directory>)在Python 3.5中创建ZIP存档在Windows上的行为不符合预期。

在Linux上它运行正常,directory内的所有文件和文件夹都归档并在zip文件中可见。但是,在Windows上会创建一个额外的文件夹 - 点文件夹.。见截图:

enter image description here

文件夹本身是空的,但我想完全摆脱它(另一个过程对结构非常严格)。解决方法是不使用make_archive()并手动创建ZipFile,但我觉得该功能应该首先起作用。

这是一个错误还是我错过了什么?

编辑:7Zip以及Total Commander中都存在点文件。 这是我最短的工作片段(Python 3.5.1,Windows 10):

import shutil
import os
os.chdir('C:/Users/melka/Downloads')
shutil.make_archive('testing', 'zip', 'zip_test')

这会从C:\Users\melka\Downloads\zip_test的内容创建一个新的ZIP,最终成为: enter image description here

但是,使用此代码手动创建zip不会创建点文件:

import os
import zipfile


def make_zip(zip_name, path):
    zip_handle = zipfile.ZipFile(zip_name, 'w', zipfile.ZIP_DEFLATED)

    os.chdir(path)
    for root, dirs, files in os.walk('.'):
        for file in files:
            zip_handle.write(os.path.join(root, file))

os.chdir('C:/Users/melka/Downloads')
make_zip('anotherzip.zip', 'zip_test')

enter image description here

1 个答案:

答案 0 :(得分:2)

This "bug" has been fixed in October 2016 : https://github.com/python/cpython/commit/666de7772708047b63125126b0147931571254a4

Here the diff : enter image description here

Apparently, you need to update to either Python 3.5.3 or 3.6.