Python:压缩文件夹+文件
我有这样一个文件夹结构:C:\Users\Simon\Desktop\mySoftware\files\output\ 在输出文件夹中,有一个文件和一个文件夹,其中包含另一个文件 我需要Python来压缩“output”文件夹中的文件和文件夹 我尝试了以下方法: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
#!/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被定义为这个函数的参数,复制代码时,您似乎犯了一个错误。