为啥 Python zipfile 模块在 zip 文件中创建完整路径

Posted

技术标签:

【中文标题】为啥 Python zipfile 模块在 zip 文件中创建完整路径【英文标题】:Why Python zipfile module creates full path inside the zip file为什么 Python zipfile 模块在 zip 文件中创建完整路径 【发布时间】:2020-06-29 21:24:24 【问题描述】:

我需要将给定目录(在 test1 内)中的所有文件压缩到一个 zip 文件中。

我的代码是

import zipfile
zipf = zipfile.ZipFile('/media/test/test1/'+'my_zip.zip', 'w', zipfile.ZIP_DEFLATED)
#Here I mentioned the path for specifying where the zip file should created
path='/media/test/test1/'
for root, dirs, files in os.walk(path):
    for file in files:
        if not str(file).endswith('.zip'):
            zipf.write(os.path.join(root, file))
zipf.close()

这给出了 my_zip.zip

的输出

当我打开它时,它包含每个子文件夹,例如 media>test>test1>test 1 中的文件

但我不想要这个媒体>test>test1。如何实现?

提前致谢。

【问题讨论】:

我认为您可以通过将arcname=file 参数指定为.write() 来解决此问题。 【参考方案1】:

如果您没有传递应该在存档中使用的名称,则 zipfile 使用传递给 write() 的路径

试试这个:

 zipf.write(os.path.join(root, file), 
            arcname=os.path.join(root.replace(path, '', 1), file))

【讨论】:

你的意思是第二行应该是这样的? zipf = zipfile.ZipFile() @Vanjith 否。使用我提供的行代替您第八行上的 zipf.write(...)

以上是关于为啥 Python zipfile 模块在 zip 文件中创建完整路径的主要内容,如果未能解决你的问题,请参考以下文章

python模块 zipfile

python zipfile模块 ZIP64

python模块之ZipFile

python用zipfile模块打包文件或是目录解压zip文件实例

python zipfile模块和optparse模块暴力破解zip文件

python中的zipfile?