我正在执行以下代码来压缩给定目录中的所有文件。如果我打开一个zip文件只是为了创建它,程序会不断地在zip上重击数据。问题在于以下陈述:
with ZipFile("Python_archive.zip", 'w') as newZip:
pass
如果我把这两行放在if root == BaseDir
条件中,程序就可以正常工作。我看不出结果有什么不同。有人能解释一下吗
完整程序:
import os
from zipfile import ZipFile
BaseDir = r'F:\Study Notes\Python'
os.chdir(BaseDir)
with ZipFile("Python_archive.zip", 'w') as newZip:
pass
for root, dir, file in os.walk(BaseDir):
if root == BaseDir:
for f in file:
with ZipFile("Python_archive.zip", 'a') as newZip:
newZip.write(f)
print(f + " has been archived....")
对于BaseDir(包括BaseDir)中的每个目录,os.walk(BaseDir)会生成当前控制器、目录和文件列表(非目录)
例如:('BaseDirPath',['dir1','dir2'],['file1','file2'])
如果与条件
if root == BaseDir:
一起使用,以上代码将压缩BaseDir中的所有文件(非目录)。当您有多个目录并且每个目录都包含一些其他文件时,下面的代码会出错以上代码中的文件是一个文件名列表,请看上面的示例。您正在尝试遍历文件名列表(在每个目录中)并将其压缩到当前文件夹中,但在当前文件夹中找不到文件名,这不起作用
使用shutil可以很容易地做到这一点
相关问题 更多 >
编程相关推荐