我有一个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
或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
在每个文件上使用,最后还是ziph.write
用那个结果做一个,但我努力让它工作并感到困惑。
有人可以建议/提供一些示例代码来帮助我理解这是如何工作的吗?
试试这个。
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
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句