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

การบีบอัดข้อมูลรองรับ gzip ใน Python (โมดูล zlib)

โมดูล 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'