Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Python

Nén tương thích gzip trong Python (module zlib)

Module zlib cung cấp triển khai của thư viện nén Zlib (https://www.zlib.net) cho Python, đây là một phần của dự án GNU.

Bài viết này thảo luận các hàm quan trọng được định nghĩa trong module zlib.

Hàm compress()

Đây là giao diện chính của module này cùng với hàm decompress(). Hàm này trả về đối tượng byte bằng cách nén dữ liệu được truyền làm tham số. Hàm có tham số bổ sung gọi là level kiểm soát mức độ nén. Đây là một số nguyên từ 0 đến 9. Giá trị thấp nhất 0 đại diện cho không nén và 9 đại diện cho nén tốt nhất. Càng mức nén cao, độ dài đối tượng byte nén càng lớn.

Hàm decompress()

Hàm này làm ngược lại hàm compress(). Nó truy xuất dữ liệu chưa nén. Hàm này có thể có tham số tùy chọn wbits kiểm soát kích thước bộ đệm lịch sử và định dạng header/trailer.

Câu lệnh sau nén một đối tượng chuỗi với sự giúp đỡ của hàm 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'

Trong khi hàm decompress() truy xuất chuỗi Python gốc:

>>> zlib.decompress(c)
b'hello python'

Module bao gồm định nghĩa của hai lớp đối tượng nén và giải nén tương ứng.

compressobj() − Constructor này trả về đối tượng nén dùng để nén luồng dữ liệu. Hai phương thức quan trọng của đối tượng này là:

  • compress() − trả về đối tượng byte đã nén.
  • flush() − Vì đối tượng nén xử lý luồng, một số dữ liệu nén có thể còn lại trong bộ đệm. Phương thức này làm rỗng bộ đệm.

Ví dụ sau thiết lập đối tượng nén và xây dựng đối tượng dữ liệu nén bằng cách thêm dữ liệu flushed vào giá trị trả về của phương thức 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() − Đây đóng vai trò constructor cho đối tượng giải nén giải nén dữ liệu lớn từ luồng. Đối tượng này cung cấp các phương thức sau:

  • decompress() − Phương thức này trả về dữ liệu chưa nén.
  • flush() − Phương thức này làm rỗng bộ đệm.

Mã sau truy xuất dữ liệu chưa nén từ đối tượng byte được tạo trong ví dụ trước:

>>> d = zlib.decompressobj()
>>> x = d.decompress(s2)
>>> x = x + d.flush()
>>> x
b'hello python'

Hai hằng số được định nghĩa trong module zlib cung cấp thông tin phiên bản của thư viện zlib đang sử dụng:

>>> zlib.ZLIB_VERSION
'1.2.11'
>>> zlib.ZLIB_RUNTIME_VERSION
'1.2.11'