Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/331.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_Compression_Zip_Zipfile - Fatal编程技术网

Python:压缩文件夹+文件

Python:压缩文件夹+文件,python,compression,zip,zipfile,Python,Compression,Zip,Zipfile,我有这样一个文件夹结构:C:\Users\Simon\Desktop\mySoftware\files\output\ 在输出文件夹中,有一个文件和一个文件夹,其中包含另一个文件 我需要Python来压缩“output”文件夹中的文件和文件夹 我尝试了以下方法: #!/usr/bin/env python import os, zipfile simonsFiles = 'C:\Users\Simon\Desktop\mySoftware\files\output\\' simonsZip

我有这样一个文件夹结构:C:\Users\Simon\Desktop\mySoftware\files\output\

在输出文件夹中,有一个文件和一个文件夹,其中包含另一个文件

我需要Python来压缩“output”文件夹中的文件和文件夹

我尝试了以下方法:

#!/usr/bin/env python
import os, zipfile

simonsFiles = 'C:\Users\Simon\Desktop\mySoftware\files\output\\'

simonsZip = zipfile.ZipFile("myzipfile.zip", "w")
for dirname, subdirs, files in os.walk(simonsFiles):
    simonsZip.write(dirname)
    for filename in files:
        simonsZip.write(os.path.join(dirname, filename))
simonsZip.close()
但是Python会在中创建一个包含整个结构的zip文件夹:

用户\Simon\Desktop\mySoftware\files\output\

当我开始输出时,它有我想要压缩到zip的文件夹和文件


如何使Python将文件夹和文件压缩为zip格式而不是整个目录结构?

您可能希望为zf.write提供第二个可选参数arcname。 以下功能适用于我:

def zip_dir(zipname, dir_to_zip):
    dir_to_zip_len = len(dir_to_zip.rstrip(os.sep)) + 1
    with zipfile.ZipFile(zipname, mode='w', compression=zipfile.ZIP_DEFLATED) as zf:
        for dirname, subdirs, files in os.walk(dir_to_zip):
            for filename in files:
                path = os.path.join(dirname, filename)
                entry = path[dir_to_zip_len:]
                zf.write(path, entry)

此函数不存档空的子目录,要使其工作,您必须在第二个for循环中迭代文件+子目录。

您可能希望为zf.write提供第二个可选参数arcname。 以下功能适用于我:

def zip_dir(zipname, dir_to_zip):
    dir_to_zip_len = len(dir_to_zip.rstrip(os.sep)) + 1
    with zipfile.ZipFile(zipname, mode='w', compression=zipfile.ZIP_DEFLATED) as zf:
        for dirname, subdirs, files in os.walk(dir_to_zip):
            for filename in files:
                path = os.path.join(dirname, filename)
                entry = path[dir_to_zip_len:]
                zf.write(path, entry)

此函数不存档空的子目录,要使其工作,您必须在第二个for循环中迭代文件+子目录。

我猜,files变量包括所有文件和文件夹。我猜,files变量包括所有文件和文件夹。只需使用“zip\u dirzip,pathname'其中pathname是路径的字符串。我得到了以下错误:回溯最近的调用last:File zip.py,第23行,在zip_dir'File',spiesFiles File zip.py,第15行,在zip_dir spiesFiles=lendir_to_zip.rstripos.sep+NameError:global name'dir_to_zip'没有定义,dir_to_zip被定义为这个函数的参数,您在复制代码时似乎犯了一个错误。只是尝试通过使用“zip_dirzip,pathname”调用函数来运行它,其中pathname是路径的字符串。我得到了以下错误:回溯最近的调用last:File zip.py,第23行,在zip_dir'File',spiesFiles File zip.py,第15行,在zip_dir spiesFiles=lendir_to_zip.rstripos.sep+NameError:global name'dir_to_zip'没有定义,dir_to_zip被定义为这个函数的参数,复制代码时,您似乎犯了一个错误。