Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

การเพิ่มไฟล์ลง Zip File ใน Python (zipfile + os.walk)

ใช้ zipfile สร้าง Zip Archive ของ Directory เดิน Directory Tree ด้วย os.walk เพิ่มไฟล์ทีละไฟล์แบบ Recursive

ฟังก์ชัน Zip Directory

import os
import zipfile

def zipdir(path, ziph):
    """Add all files in path to zip handle ziph"""
    for root, dirs, files in os.walk(path):
        for file in files:
            filepath = os.path.join(root, file)
            # Archive name: relative path จาก path ที่กำหนด
            arcname = os.path.relpath(filepath, path)
            ziph.write(filepath, arcname)

# ใช้งาน
zipf = zipfile.ZipFile('Zipped_file.zip', 'w', zipfile.ZIP_DEFLATED)
zipdir('./my_folder', zipf)
zipf.close()

Context Manager Version (แนะนำ)

>> import os, zipfile
>>> with zipfile.ZipFile('Zipped_file.zip', 'w', zipfile.ZIP_DEFLATED) as zipf:
...     for root, dirs, files in os.walk('./my_folder'):
...         for file in files:
...             filepath = os.path.join(root, file)
...             arcname = os.path.relpath(filepath, './my_folder')
...             zipf.write(filepath, arcname)

คำอธิบาย

  • os.walk(path) → Generator ของ (root, dirs, files) ทุกชั้น
  • os.path.join(root, file) → Absolute path ของไฟล์จริง
  • os.path.relpath(filepath, base) → Relative path ภายใน Zip (ไม่รวม base folder)
  • ZIP_DEFLATED → Compression method (ต้องมี zlib)

เพิ่มไฟล์เดี่ยว (ไม่ใช่ Directory)

>> with zipfile.ZipFile('single.zip', 'w') as zf:
...     zf.write('file.txt')           # ใช้ชื่อไฟล์เป็น arcname
...     zf.write('data.csv', 'new.csv') # ระบุ arcname เอง