通过首先归档目录中的所有单个文件来创建目录归档 (Python)
Create archive of a directory by first archiving all individual files in it (Python)
我有一个目录 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
,如 this answer and shutil
as seen this answer 中所示,两者都来自同一个问题。我虽然在每个文件上使用 shutil.make_archive
,最后用那个结果做了 ziph.write
,但我很难让它工作并且感到困惑。
有人可以 suggest/provide 一些示例代码来帮助我理解这是如何工作的吗?
试试这个。
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
我有一个目录 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
,如 this answer and shutil
as seen this answer 中所示,两者都来自同一个问题。我虽然在每个文件上使用 shutil.make_archive
,最后用那个结果做了 ziph.write
,但我很难让它工作并且感到困惑。
有人可以 suggest/provide 一些示例代码来帮助我理解这是如何工作的吗?
试试这个。
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