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

การบีบอัดที่เข้ากันได้กับ gzip ใน Python (zlib)


โมดูล zlib ให้การใช้งานไลบรารีบีบอัด Zlib ของ Python (https://www.zlib.net) ซึ่งเป็นส่วนหนึ่งของโครงการ GNU

บทความนี้กล่าวถึงฟังก์ชันสำคัญที่กำหนดไว้ในโมดูล zlib

บีบอัด()

ฟังก์ชันนี้เป็นอินเทอร์เฟซหลักของโมดูลนี้พร้อมกับฟังก์ชันคลายการบีบอัด () ฟังก์ชันนี้ส่งคืนอ็อบเจ็กต์ไบต์โดยบีบอัดข้อมูลที่กำหนดให้เป็นพารามิเตอร์ ฟังก์ชันนี้มีพารามิเตอร์อื่นที่เรียกว่าระดับ ซึ่งควบคุมขอบเขตของการบีบอัด เป็นจำนวนเต็มระหว่าง 0 ถึง 9 ค่าต่ำสุด 0 หมายถึงไม่มีการบีบอัดและ 9 หมายถึงการบีบอัดที่ดีที่สุด ยิ่งระดับการบีบอัดสูงขึ้น ความยาวของอ็อบเจ็กต์ไบต์ที่บีบอัดก็ยิ่งมากขึ้น

แตกไฟล์()

ฟังก์ชันนี้ทำงานตรงข้ามกับฟังก์ชันการบีบอัด () มันดึงข้อมูลที่ไม่มีการบีบอัด ฟังก์ชันนี้สามารถมีพารามิเตอร์ทางเลือกที่เรียกว่า wbits ซึ่งควบคุมขนาดของบัฟเฟอร์ประวัติและลักษณะของรูปแบบส่วนหัวและส่วนท้าย

คำสั่งต่อไปนี้บีบอัดวัตถุสตริงโดยใช้ฟังก์ชันการบีบอัด ()

>>> 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() − ตัวสร้างนี้ส่งคืนอ็อบเจ็กต์การบีบอัดเพื่อใช้ในการบีบอัดสตรีมข้อมูล สองวิธีที่สำคัญของวัตถุนี้คือ

บีบอัด() − ส่งคืนอ็อบเจ็กต์ไบต์ที่บีบอัด

ล้าง() − เนื่องจากอ็อบเจ็กต์การบีบอัดเกี่ยวข้องกับสตรีม ข้อมูลที่บีบอัดบางส่วนอาจยังคงอยู่ในบัฟเฟอร์ วิธีนี้จะล้างบัฟเฟอร์

ตัวอย่างต่อไปนี้ตั้งค่าออบเจ็กต์การบีบอัดและสร้างออบเจ็กต์ข้อมูลบีบอัดโดยการเพิ่มข้อมูลที่ฟลัชไปยังค่าส่งคืนของวิธีการบีบอัด ()

>>> 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'

คลายการบีบอัด() − สิ่งนี้ทำหน้าที่เป็นตัวสร้างสำหรับออบเจกต์การคลายการบีบอัดซึ่งขยายข้อมูลขนาดใหญ่จากสตรีม วัตถุนี้เพื่อให้วิธีการดังต่อไปนี้

คลายการบีบอัด() - เมธอดนี้ส่งคืนข้อมูลที่ไม่บีบอัด

ล้าง() − วิธีนี้จะล้างบัฟเฟอร์

รหัสต่อไปนี้ดึงข้อมูลที่ไม่บีบอัดจากวัตถุไบต์ที่สร้างขึ้นในตัวอย่างก่อนหน้า

>>> 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'