如何将多个文件夹添加到一个 zip 文件中(将文件夹 1、文件夹 2 添加到包含少量文件的 myzip.zip filr)

Posted

技术标签:

【中文标题】如何将多个文件夹添加到一个 zip 文件中(将文件夹 1、文件夹 2 添加到包含少量文件的 myzip.zip filr)【英文标题】:How to add multiple folders into a zip file (add folder1, folder2 to myzip.zip filr containing few files) 【发布时间】:2017-06-02 19:02:22 【问题描述】:

我一直在尝试将多个 python 模块添加到一个 zip 文件中。但是,我没有成功,因为新添加的模块正在替换前一个模块,我不明白这种关系。 command_utils 添加了一个 util 文件,下一个 command_utils2 添加了另一个模块,之后整个第一个模块都消失了。基本上,我想在用源代码制作 zip 文件后将我的 2 个模块添加到 zip 文件中。这是我的代码。

import shutil
import os
import subprocess

zip_name = os.getcwd().split("/")[-1]

project_dir = '/tmp/'

shutil.make_archive(zip_name, "zip", project_dir+"test/")

os.chdir('/tmp/')
command_utils = 'zip -r '+project_dir+'test/'+zip_name+'platformutils'
print os.getcwd()
command_utils2 = 'zip -r '+project_dir+'test/'+zip_name+' pytz'
command_delete_archive = 'zip -d '+project_dir+'test/'+zip_name+'.zip '+zip_name+'.zip'
# command_update_function = 'aws lambda update-function-code --function-name 
'+zip_name+' --zip-file fileb://'+project_dir+zip_name+'/'+zip_name+'.zip'
# print command_utils
print command_utils2
print command_delete_archive
# print command_update_function
try:
   # c_u = subprocess.Popen(command_utils, shell=True, stdout=subprocess.PIPE)
   c_u2 = subprocess.Popen(command_utils2, shell=True, stdout=subprocess.PIPE)
   c_d_a = subprocess.Popen(command_delete_archive, shell=True, stdout=subprocess.PIPE)
   # p = subprocess.Popen(commands
except subprocess.CalledProcessError as e:
   raise e

【问题讨论】:

How to create a zip archive of a directory的可能重复 paco H. 不,我看到了这个问题。我的是将几个文件夹添加到已经存在的 zip 文件中。我希望将文件夹 1 和文件夹 2 添加到一个压缩文件 myZip.zip 中,该文件之前已经压缩了几个文件。我基本上想实时将文件夹添加到这个 zip 中。 那么也许是这个? ***.com/questions/34270582/… 这有帮助,但下面的答案给了我一个正确的解决方案。 【参考方案1】:

使用zipfile 模块:

from zipfile import Zipfile
myzipfile = ZipFile("spam.zip", mode='a')
for mod_path in module_paths: 
    myzipfile.write(mod)
myzipfile.close()

注意我使用a 模式而不是w 压缩文件:

如果 mode 是 'a' 并且 file 是指一个现有的 ZIP 文件,那么会添加额外的文件。如果文件不引用 ZIP 文件,则将新的 ZIP 存档附加到文件中。这用于将 ZIP 存档添加到另一个文件(例如 python.exe)。如果 mode 为 'a' 并且文件根本不存在,则创建它。

【讨论】:

这有帮助,这个命令对我有用 zip.write(path_to_file, os.path.basename(path_to_file)) 谢谢,成功了!应该是 ZipFile 在导入语句和 mod_path 进入 for 循环 ;)

以上是关于如何将多个文件夹添加到一个 zip 文件中(将文件夹 1、文件夹 2 添加到包含少量文件的 myzip.zip filr)的主要内容,如果未能解决你的问题,请参考以下文章

如何将多个文件扩展名添加到文件:Foreach 循环容器 SSIS 中的输入字段

Python - 如何将多个文件夹从路径压缩到单个 zip 文件?

如何使用Golang将文件添加到现有的zip文件中

将文件添加到现有 Zip

如何将文件添加到 .NET Core 中 zip 内的文件夹中?

如何以内存有效的方式将大量文件添加到 zip 中?