我正在制作ZIP文件的程序。在这种情况下,我试图ZIP目录,其中包含一个子目录。如果程序必须ZIP目录,我使用以下函数,但它不是ZIP子目录,它只是从子目录中获取文件并将它们与其他所有文件放在一起。
zipper = zipfile.ZipFile(systemDate + ".zip", "w")
def zipdir(path, ziph):
logging.info("ZIP function has been called.")
for root, dirs, files in os.walk(path):
for file in files:
fileNom = os.path.join(root, file)
print("file nom: " + fileNom)
zipper.write(fileNom, basename(fileNom))
感谢。
答案 0 :(得分:4)
ZipFile.write
的第二个参数是存档名称,即存档中文件的文件名。由于ZIP文件本身不包含任何文件夹信息, 就是必须去的地方。因此,为了将文件放在子目录中,您必须调整arcname
以包含目录名。
您可以使用os.path.relpath
来计算相对于path
的路径,该路径似乎是ZIP文件的根目录:
zipper.write(fileNom, os.path.relpath(fileNom, path))