ใช้โมดูล zipfile สร้าง Zip Archive จาก Directory โดยเดิน Tree ด้วย os.walk
โค้ดสร้าง Zip (Complete)
import os
import zipfile
def zipdir(path, ziph):
for root, dirs, files in os.walk(path):
for file in files:
filepath = os.path.join(root, file)
arcname = os.path.relpath(filepath, path)
ziph.write(filepath, arcname)
with zipfile.ZipFile('Zipped_file.zip', 'w', zipfile.ZIP_DEFLATED) as zipf:
zipdir('./my_folder', zipf)
คำอธิบาย
ZipFile(name, 'w', ZIP_DEFLATED)- สร้าง Zip ใหม่ โหมด Write ใช้ Compressionos.walk(path)- Generator เดิน Directory Tree แบบ Top-downos.path.relpath(filepath, path)- Path ภายใน Zip (Relative to source directory)ziph.write(filepath, arcname)- เพิ่มไฟล์จริงเข้า Zip ด้วยชื่อ Archive Name
Compression Methods
| Constant | Method | Note |
|---|---|---|
ZIP_STORED | No Compression | Default, เร็วกว่า |
ZIP_DEFLATED | Zlib Deflate | ต้องมี zlib, 壓縮率好 |
ZIP_BZIP2 | Bzip2 | Python 3.3+, 壓縮率更好 |
ZIP_LZMA | LZMA | Python 3.3+, 壓縮率最好 |
เพิ่มไฟล์จาก Memory (Bytes/String)
>> with zipfile.ZipFile('mem.zip', 'w') as zf:
... zf.writestr('hello.txt', 'Hello from memory!')
... zf.writestr('data.json', json.dumps({'key': 'value'}))