通过首先归档目录中的所有单个文件来创建目录的归档(Python)

时间:2017-03-03 16:59:03

标签: python-3.x zipfile shutil

我有一个目录dir,其中包含3个文件:f1.txtf2.txtf3.pngt

我想创建一个 zip存档 给定该目录的路径其中每个文件将是一个zip存档。生成的zipped_archive.zip应与dir所在的路径相同。

也就是说,我希望zipped_archive.zip包含f1.zipf2.zipf3.zip,其中每个f#.zip文件都包含相应命名的txt 1}}或png文件。

使用此文件结构

可以更好地说明上述内容
tmp
 |
 +-- dir
 |    |
 |    +-- f1.txt
 |    +-- f2.txt
 |    +-- f3.txt
 |
 +-- zipped_archive.zip
 |          |
 |          +-- f1.zip
 |          |     |
 |          |     +-- f1.txt
 |          +-- f2.zip
 |          |     |
 |          |     +-- f2.txt
 |          +-- f3.zip
 |          |     |
 |          |     +-- f3.png

我已尝试应用zipfileshutil中显示的shutil.make_archive,如this answer所示,两者均来自同一问题。我虽然在每个文件上都使用了ziph.write,但最后却得到了cmdTemp = Nothing; 的结果,但是我很难让它工作并且感到困惑。

有人可以建议/提供一些示例代码来帮助我了解其工作原理吗?

1 个答案:

答案 0 :(得分:1)

试试这个。

import os
import zipfile

target = "dir"
os.chdir(target)  # change directory to target
files = os.listdir('.')  # get all filenames into a list

zipfiles = []  # a list which will be used later for containing zip files
for i in range(len(files)):
    fn = files[i].split('.')[0] + '.zip'  # f#.??? -> f#.zip
    zipf = zipfile.ZipFile(fn, 'w', zipfile.ZIP_DEFLATED)
    zipf.write(files[i])
    zipf.close()
    zipfiles.append(fn)  # put f#.zip into the list for later use

zipf = zipfile.ZipFile('../zipped_archive.zip', 'w', zipfile.ZIP_DEFLATED)
for i in range(len(zipfiles)):
    zipf.write(zipfiles[i])
    os.remove(zipfiles[i])  # delete f#.zip after archiving

zipf.close()
os.chdir('..')  # change directory to target's parent