如何在python中使用相对路径在目录上使用zip.write?

问题描述

我想为我的zip文件中的目录添加显式条目。例如,我的zip文件包括:

assets/images/logo.png

实际上,我需要它包括:

assets/
assets/images/
assets/images/logo.png

所以我的问题是,如何使用相对路径将目录添加为显式条目?我尝试使用zip.write(relative/path/to/directory),但是它说找不到目录,因为它是相对路径。我放的时候就可以了

/Users/i510118/Desktop/Engineering/kit-dev-portal-models/src/kit_devportal_models/static_data/static_extension/created_extnsn_version_update2/assets/images/logo.png

在zipfile.write()里面,但是我需要它只是相对路径,这只是

assets/images/logo.png

这可能吗?

这是我的完整代码

        buf = io.BytesIO()
    zipObj = zipfile.ZipFile(buf,"w")
    extension_folder = "created_extnsn_version_update2"
    with zipObj:
        # Iterate over all the files in directory
        for folderName,subfolders,filenames in os.walk(path_to_extension_directory):
            # If the folder is not the root folder the extension is in
            if not folderName.endswith(extension_folder):
                folder = folderName.split(f"{extension_folder}/",1)[1]
            else:
                folder = ''
            for filename in filenames:
                # create complete filepath of file in directory
                filePath = os.path.relpath(os.path.join(folderName,filename),path_to_extension_directory)
                with open(f"{folderName}/{filename}",'rb') as file_data:
                    bytes_content = file_data.read()
                    # Add folder to zip if its not the root directory
                    if folder:
                        zipObj.write(folder)
                    # Add file to zip
                    zipObj.writestr(filePath,bytes_content)
                    # edit zip file to have all permissions
                    zf = zipfile.ZipFile(buf,mode='a')
                    info = zipfile.ZipInfo(f"{folderName}/{filename}")
                    info.external_attr = 0o777 << 16
                    zf.writestr(info,f"{folderName}/{filename}")

    # Rewind the buffer's file pointer (may not be necessary)
    buf.seek(0)
    return buf.read()

如果您需要更多信息,请告诉我!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)