Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在代码中获取问题,该代码将压缩给定目录中的所有文件_Python - Fatal编程技术网

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

Python 在代码中获取问题,该代码将压缩给定目录中的所有文件,python,Python,我正在执行以下代码来压缩给定目录中的所有文件。如果我打开一个zip文件只是为了创建它,程序会不断地在zip上重击数据。问题在于以下陈述: with ZipFile("Python_archive.zip", 'w') as newZip: pass 如果我将这两行放在If root==BaseDir条件中,程序运行良好。我看不出结果有什么不同。谁能解释一下吗 完整的程序: import os from zipfile import ZipFile BaseDir = r'F:\Stu

我正在执行以下代码来压缩给定目录中的所有文件。如果我打开一个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.walkBaseDir将生成当前控制器、目录列表和非目录文件

例如:'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)

请更详细地描述一下哪里错了。