โมดูล zlib ให้การนำไลบรารีการบีบอัด Zlib (https://www.zlib.net) มาใช้ใน Python ซึ่งเป็นส่วนหนึ่งของโครงการ GNU
บทความนี้อธิบายฟังก์ชันสำคัญที่นิยามในโมดูล zlib
ฟังก์ชัน compress()
ฟังก์ชันนี้เป็นอินเตอร์เฟซหลักของโมดูลร่วมกับฟังก์ชัน decompress() ฟังก์ชันนี้คืนค่าเป็นไบนารีจากการบีบอัดข้อมูลที่ส่งเข้ามา มีพารามิเตอร์อีกตัวคือ level ควบคุมระดับการบีบอัด เป็นจำนวนเต็มระหว่าง 0 ถึง 9 ค่าต่ำสุด 0 หมายถึงไม่บีบอัด และ 9 หมายถึงบีบอัดมากที่สุด ยิ่งระดับสูง ยิ่งขนาดไบนารีที่บีบอัดแล้วใหญ่ขึ้น
ฟังก์ชัน decompress()
ฟังก์ชันนี้ทำงานตรงข้ามกับ compress() คือดึงข้อมูลต้นฉบับที่ไม่ได้บีบอัด อาจมีพารามิเตอร์เพิ่มเติม wbits ควบคุมขนาดบัฟเฟอร์ประวัติและรูปแบบเฮดเดอร์/ทรีลอร์
คำสั่งต่อไปนี้บีบอัดสตริงด้วยฟังก์ชัน compress():
>>> import zlib >>> c = zlib.compress(b'hello python') >>> c b'x\x9c\xcbH\xcd\xc9\xc9W(\xa8,\xc9\xc8\xcf\x03\x00\x1e\xf0\x04\xd7'
ในขณะที่ฟังก์ชัน decompress() จะคืนค่าสตริง Python ต้นฉบับ:
>>> zlib.decompress(c) b'hello python'
โมดูลประกอบด้วยการนิยามสองคลาสสำหรับออบเจ็กต์การบีบอัดและถอดการบีบอัด
compressobj() − คอนสตรัคเตอร์นี้คืนค่าออบเจ็กต์การบีบอัดสำหรับบีบอัดสตรีมข้อมูล เมธอดสำคัญสองเมธอดของออบเจ็กต์นี้คือ
- compress() − คืนค่าไบนารีที่บีบอัดแล้ว
- flush() − เนื่องจากออบเจ็กต์การบีบอัดจัดการกับสตรีม ข้อมูลที่บีบอัดบางส่วนอาจคงอยู่ในบัฟเฟอร์ เมธอดนี้จะว่างเปล่าบัฟเฟอร์
ตัวอย่างต่อไปนี้ตั้งค่าออบเจ็กต์การบีบอัดและสร้างออบเจ็กต์ข้อมูลที่บีบอัดโดยการต่อข้อมูลที่ flush เข้ากับค่าที่คืนจากเมธอด compress():
>>> s1 = b'hello python' >>> c = zlib.compressobj() >>> s2 = c.compress(s1) >>> s2 = s2 + c.flush() >>> s2 b'x\x9c\xcbH\xcd\xc9\xc9W(\xa8,\xc9\xc8\xcf\x03\x00\x1e\xf0\x04\xd7'
decompressobj() − ทำหน้าที่เป็นคอนสตรัคเตอร์สำหรับออบเจ็กต์ถอดการบีบอัด ซึ่งถอดข้อมูลขนาดใหญ่จากสตรีม ออบเจ็กต์นี้ให้เมธอดดังนี้:
- decompress() − เมธอดนี้คืนค่าข้อมูลที่ถอดการบีบอัดแล้ว
- flush() − เมธอดนี้ว่างเปล่าบัฟเฟอร์
โค้ดต่อไปนี้ดึงข้อมูลที่ไม่ได้บีบอัดจากไบนารีที่สร้างในตัวอย่างก่อนหน้า:
>>> d = zlib.decompressobj() >>> x = d.decompress(s2) >>> x = x + d.flush() >>> x b'hello python'
โมดูล zlib นิยามค่าคงที่สองค่า ที่ให้ข้อมูลเวอร์ชันของไลบรารี zlib ที่ใช้งาน:
>>> zlib.ZLIB_VERSION '1.2.11' >>> zlib.ZLIB_RUNTIME_VERSION '1.2.11'