我有一个目录dir
,其中包含3个文件:f1.txt
,f2.txt
,f3.pngt
。
我想创建一个 zip存档 给定该目录的路径其中每个文件将是一个zip存档。生成的zipped_archive.zip
应与dir
所在的路径相同。
也就是说,我希望zipped_archive.zip
包含f1.zip
,f2.zip
,f3.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
我已尝试应用zipfile
和shutil
中显示的shutil.make_archive
,如this answer所示,两者均来自同一问题。我虽然在每个文件上都使用了ziph.write
,但最后却得到了cmdTemp = Nothing;
的结果,但是我很难让它工作并且感到困惑。
有人可以建议/提供一些示例代码来帮助我了解其工作原理吗?
答案 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