gpt4 book ai didi

Python - 使用 zipfile 模块压缩目录中的所有文件

转载 作者:太空宇宙 更新时间:2023-11-03 12:03:09 24 4
gpt4 key购买 nike

我正在尝试使用 python zipfile 模块压缩文件夹中的所有文件(该文件夹没有任何子目录),但似乎无法获得所需的输出。

我的 folderA 位于 F:\Projects\ProjectA\Folders\folderA 下,我的脚本位于 F:\Projects\ProjectA\CodeA\zipcode.py 下。我想压缩 folderA 中的所有文件,以便生成的 zip 文件在 F:\Projects\ProjectA\Folders 下命名为 folderA.zip 并使用原始文件名。

唯一的问题是解压缩结果会产生 Folders\folderA,而不仅仅是 folderA。它与 folderA 到脚本的相对路径有关,但我似乎无法获得所需的结果。

#zipcode.py
import os
import zipfile

filepath = "F:/Projects/ProjectA/Folders/folderA"

archive = zipfile.ZipFile(os.path.abspath(filepath) + '.zip', 'w')

for root, dirs, files in os.walk(filepath):
for afile in files:
archive.write(os.path.relpath(os.path.join(root, afile)))
archive.close()

最佳答案

在您的循环中,使用arcname 参数更改存档成员的名称:

archive.write(os.path.join(root, afile),arcname=name_in_archive)

在哪里

name_in_archive = os.path.join(os.path.basename(filepath),afile)

保留 folderA 路径。

我不确定的一件事(取决于 python 的版本)是您可能必须将 Windows 反斜杠替换为斜杠,以便 .zip 文件是可移植的。不痛:

archive.write(os.path.join(root, afile),arcname=name_in_archive.replace(os.sep,"/"))

请注意,我已经删除了 os.path.relpath 调用,现在不需要,因为我们可以完全控制存档中文件的名称。

另请注意,打开存档时无需转换为绝对路径。 open 查找相对文件和绝对文件:

archive = zipfile.ZipFile(os.path.abspath(filepath) + '.zip', 'w')

可以这样写

archive = zipfile.ZipFile(filepath + '.zip', 'w')

关于Python - 使用 zipfile 模块压缩目录中的所有文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41451777/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com