在给定目录中压缩所有文件的代码中获取问题

2024-09-27 00:11:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在执行以下代码来压缩给定目录中的所有文件。如果我打开一个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....")

Tags: 文件import程序forifosaswith
1条回答
网友
1楼 · 发布于 2024-09-27 00:11:56

对于BaseDir(包括BaseDir)中的每个目录,os.walk(BaseDir)会生成当前控制器、目录和文件列表(非目录)

例如:('BaseDirPath',['dir1','dir2'],['file1','file2'])

with ZipFile("Python_archive.zip", 'a') as newZip:
      newZip.write(f)
      print(f + " has been archived....")

如果与条件if root == BaseDir:一起使用,以上代码将压缩BaseDir中的所有文件(非目录)。当您有多个目录并且每个目录都包含一些其他文件时,下面的代码会出错

for root, dir, file in os.walk(BaseDir):
    for f in file:

以上代码中的文件是一个文件名列表,请看上面的示例。您正在尝试遍历文件名列表(在每个目录中)并将其压缩到当前文件夹中,但在当前文件夹中找不到文件名,这不起作用

使用shutil可以很容易地做到这一点

import shutil
shutil.make_archive('Python_archive', 'zip', BaseDir)

相关问题 更多 >

    热门问题