Windows上的Python zipfile问题

时间:2017-07-13 15:40:35

标签: python zipfile

我编写了一个简单粗略的程序,可以自动压缩当前工作目录中的所有内容。它在Linux上运行良好,但在Windows上运行时存在很大问题。

这是我的代码:

import os, zipfile

zip = zipfile.ZipFile('zipped.zip', 'w')  #Create a zip file
zip.close()

zip = zipfile.ZipFile('zipped.zip', 'a')  #Make zip file append instead of overwriting
for dir, subdir, file in os.walk(os.path.relpath('.')):  #Loop for walking thru the directory

    for subdirectory in subdir:
        subdirs = os.path.join(dir, subdirectory)  
        zip.write(subdirs, compress_type=zipfile.ZIP_DEFLATED)

    for files in file:
        fil = os.path.join(dir, files)
        zip.write(fil, compress_type=zipfile.ZIP_DEFLATED)

zip.close()

当我在Windows上运行它时,它不会停止压缩,而是在压缩文件中无限制地创建“zipped.zip”文件,在它运行几秒后,生成几百MB的文件。在Linux上,程序将在压缩除新创建的zipped.zip之外的所有文件后停止。

Screenshot: A "zipped.zip" inside the "zipped.zip"

我想知道我是否遗漏了一些可以在Windows上运行良好的代码?

2 个答案:

答案 0 :(得分:1)

我会将文件夹压缩到临时zip文件中,然后将临时zip文件移到文件夹中。

答案 1 :(得分:0)

这似乎是因为您将zip保存到您尝试压缩的同一文件夹中,并且必须以某种方式混淆os.walk()

一个可能的解决方案,只要您没有要压缩的巨型目录,就是使用os.walk()来构建将要压缩的完整列表,并在列表完成后,然后你可以填充zip,而不是直接使用os.walk()