Python - 使用 zipfile 模块压缩目录中的所有文件
Python - Compress all files in a directory using zipfile module
我正在尝试使用 python zipfile 模块压缩文件夹中的所有文件(该文件夹没有任何子目录),但似乎无法获得所需的输出。
我 folderA
坐在 F:\Projects\ProjectA\Folders\folderA and my script under 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 模块压缩文件夹中的所有文件(该文件夹没有任何子目录),但似乎无法获得所需的输出。
我 folderA
坐在 F:\Projects\ProjectA\Folders\folderA and my script under 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')