如何将多个文件夹添加到一个压缩文件中(将文件夹1,文件夹2添加到名为myzip.zip的压缩文件中,该压缩文件中已经包含一些文件)

3

我一直在尝试将多个Python模块添加到一个zip文件中。然而,我一直失败,因为新添加的模块正在替换先前的模块,我不理解这种关系。command_utils添加了一个实用文件,下一个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

1
可能是如何创建一个目录的zip存档文件的重复问题。 - Paco H.
Paco H. 不,我看过那个问题了。我的问题是如何将几个文件夹添加到已经存在的 zip 文件中。我想要将 folder1 和 folder2 添加到一个名为 myZip.zip 的 zip 文件中,该文件之前已经压缩了一些文件。我基本上想要实时向这个 zip 文件中添加文件夹。 - ZZzzZZzz
1
也许这个可以吗?https://dev59.com/iVsX5IYBdhLWcg3wDsA8 - Paco H.
这有所帮助,但下面的答案给了我正确的解决方案。 - ZZzzZZzz
1个回答

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

注意,我使用的是 a 模式而不是 w 模式来处理压缩文件:

如果模式为 'a' 并且文件引用一个现有的 ZIP 文件,则会向其添加其他文件。如果文件未引用 ZIP 文件,则会将新的 ZIP 存档附加到该文件中。这是用于将 ZIP 存档添加到另一个文件(例如 python.exe)中。如果模式为 'a' 并且文件根本不存在,则会创建它。


这很有帮助,这个命令对我很有用: zip.write(path_to_file, os.path.basename(path_to_file)) - ZZzzZZzz
3
谢谢,它奏效了!应该在导入语句中使用ZipFile和将mod_path放入for循环中。 - oz19

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接