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

问题描述 投票:0回答:1

我一直在尝试将多个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
python shutil
1个回答
4
投票

使用zipfile模块:

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

注意,我对 zip 文件使用了

a
模式,而不是
w

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

© www.soinside.com 2019 - 2024. All rights reserved.