python中包含子文件夹的ZIP文件夹

python中包含子文件夹的ZIP文件夹,python,zip,Python,Zip,我需要使用python压缩一个包含.xml文件和.fgdb文件的文件夹。有人能帮我吗?我尝试了在internet上找到的一些脚本,但总是存在一些技术问题(例如创建一个空的zip文件,或者创建我无法打开的zip文件“无权限”等等) 提前感谢。使其工作的关键是功能。这是我过去编写的一个脚本,应该可以使用。如果有任何例外,请告诉我 import zipfile import os import sys def zipfolder(foldername, target_dir):

我需要使用python压缩一个包含.xml文件和.fgdb文件的文件夹。有人能帮我吗?我尝试了在internet上找到的一些脚本,但总是存在一些技术问题(例如创建一个空的zip文件,或者创建我无法打开的zip文件“无权限”等等)


提前感谢。

使其工作的关键是功能。这是我过去编写的一个脚本,应该可以使用。如果有任何例外,请告诉我

import zipfile
import os
import sys

def zipfolder(foldername, target_dir):            
    zipobj = zipfile.ZipFile(foldername + '.zip', 'w', zipfile.ZIP_DEFLATED)
    rootlen = len(target_dir) + 1
    for base, dirs, files in os.walk(target_dir):
        for file in files:
            fn = os.path.join(base, file)
            zipobj.write(fn, fn[rootlen:])

zipfolder('thenameofthezipfile', 'thedirectorytobezipped') #insert your variables here
sys.exit()
非常有帮助,但我花了一点时间才完全理解
rootlen
的用途。这个例子使用一些较长的变量名来帮助教授这里到底发生了什么。还包括一个用于验证zip文件是否正确的块

导入操作系统
进口拉链
src_path=os.path.join(“/”、“some”、“src”、“path”)
归档文件名称='myZipFile.zip'
archive_path=os.path.join(“/”、“some”、“path”、archive_name)
将zipfile.zipfile(归档文件路径'w',zipfile.ZIP_解压缩)作为归档文件:
对于os.walk(src_path)中的dirpath、dirname和文件名:
对于文件名中的文件名:
file_path=os.path.join(dirpath,文件名)
归档文件路径=os.path.relpath(文件路径,src路径)
归档文件。写入(文件路径,归档文件路径)
将zipfile.zipfile(存档路径'r')作为存档文件:
bad_file=zipfile.zipfile.testzip(归档文件)
如果文件不正确:
升起zipfile.BadZipFile(
“{}文件为{}的{}的CRC检查失败。格式(存档路径,坏文件))

如果有人希望在您的项目中使用某些通用功能

def zip_compression_tree(root_path, zip_name):
with zipfile.ZipFile(zip_name, 'w') as z:
    for root, dirs, files in os.walk(root):
        for file in files:
            z.write(os.path.join(root, file))
        for directory in dirs:
            z.write(os.path.join(root, directory))

好啊先帮我点忙。在这种情况下,target_dir是什么,foldername是什么?请给我举个例子,好吗。因为我尝试了你的代码,它运行时没有异常,但也没有创建zip?!您好,Z77,我编辑的代码,使其更具体到您的问题,请检查新的脚本。foldername是要为新的.zip文件指定的文件夹名称,target_dir是要压缩的目标文件夹。只需将脚本放在要压缩的文件夹的包含文件夹中,更改函数调用中的变量,它就可以工作了。Tnx对于您的努力来说,但仍然没有,没有创建压缩文件(我必须道歉。Code works.Zip文件实际上是在保存了.py的文件夹中创建的。我没有注意fn[rootlen:]。非常感谢!!!仅供参考我爱你。这在我尝试寻找解决方案大约4天后的第一次尝试中奏效。诀窍是跳过一个文件夹,这样我就不会包含顶级目录。