我编写了一个简单粗略的程序,可以自动压缩当前工作目录中的所有内容。它在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上运行良好的代码?
答案 0 :(得分:1)
我会将文件夹压缩到临时zip文件中,然后将临时zip文件移到文件夹中。
答案 1 :(得分:0)
这似乎是因为您将zip保存到您尝试压缩的同一文件夹中,并且必须以某种方式混淆os.walk()
。
一个可能的解决方案,只要您没有要压缩的巨型目录,就是使用os.walk()
来构建将要压缩的完整列表,并在列表完成后,然后你可以填充zip,而不是直接使用os.walk()
。