Python创建无目录层级ZIP文件的技术问题求助
解决Python生成ZIP文件时去除内部目录层级的问题
你当前的代码会把原文件的完整路径保留在ZIP包里,要实现只存文件不带目录,只需要给zip.write()方法指定arcname参数,用文件名替代完整路径即可。
修改后的代码
import time import os from zipfile import ZipFile name = time.strftime("%Y%m%d-%H%M%S") name = '../models/' + str(name) + '.zip' with ZipFile(os.path.abspath(name), 'w') as zip: # 注意变量名修正为files(原代码里的filies是拼写错误) for file in files: # 用os.path.basename提取纯文件名,作为ZIP内的存储名称 zip.write(file, arcname=os.path.basename(file)) # with上下文管理器会自动关闭ZipFile对象,无需手动调用close()
关键说明
os.path.basename(file)会从完整路径中提取出文件名,比如/users/me/desktop/project/file.png会被处理成file.png,这样ZIP内部就只会保留这个纯文件名,不会带任何目录层级。- 原代码里的
zip.close()是多余的,with语句会在代码块结束后自动关闭ZipFile对象,避免资源泄漏。 - 如果你的
files列表里存在重名文件,后添加的文件会覆盖先添加的,若需要避免这种情况,可以给重名文件添加前缀/后缀(比如加时间戳、序号)。
内容的提问来源于stack exchange,提问作者vedsil
相关产品推荐
相关产品推荐

