Directory का Zip Archive बनाना
zipfile Module का उपयोग करके Directory का Zip Archive बनाएं। os.walk का उपयोग करके Directory Tree को Walk करें और इसमें सभी Files को Recursively Add करें।
उदाहरण
import os
import zipfile
def zipdir(path, ziph):
# ziph is zipfile handle
for root, dirs, files in os.walk(path):
for file in files:
file_path = os.path.join(root, file)
# Archive में Relative Path Store करें
arcname = os.path.relpath(file_path, path)
ziph.write(file_path, arcname)
zipf = zipfile.ZipFile('Zipped_file.zip', 'w', zipfile.ZIP_DEFLATED)
zipdir('./my_folder', zipf)
zipf.close()
उपरोक्त Code my_folder के Contents को 'Zipped_file.zip' नामक File में Zip करेगा और इसे Current Directory में Store करेगा।
Improved Version (Error Handling के साथ)
import os
import zipfile
def zip_directory(source_dir, output_zip):
"""Directory को Zip करें Relative Paths Preserve करते हुए"""
with zipfile.ZipFile(output_zip, 'w', zipfile.ZIP_DEFLATED) as zipf:
for root, dirs, files in os.walk(source_dir):
for file in files:
file_path = os.path.join(root, file)
# Archive में Relative Path
arcname = os.path.relpath(file_path, source_dir)
try:
zipf.write(file_path, arcname)
except (OSError, PermissionError) as e:
print(f"Skipping {file_path}: {e}")
# उपयोग
zip_directory('./my_folder', 'Zipped_file.zip')
Pathlib + Zipfile (Modern)
from pathlib import Path
import zipfile
source = Path('my_folder')
with zipfile.ZipFile('archive.zip', 'w', zipfile.ZIP_DEFLATED) as zf:
for file in source.rglob('*'):
if file.is_file():
zf.write(file, file.relative_to(source))