Computer >> Máy Tính >  >> Lập trình >> Python

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

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

Bài viết này thảo luận về các chức năng quan trọng được xác định trong mô-đun zlib.

nén ()

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

giải nén ()

Hàm này thực hiện ngược lại với hàm nén (). Nó lấy dữ liệu chưa nén. Hàm này có thể có một tham số tùy chọn được gọi là wbits để kiểm soát kích thước của bộ đệm lịch sử và bản chất của định dạng tiêu đề và đoạn giới thiệu.

Câu lệnh sau nén một đối tượng chuỗi với sự trợ giúp của hàm nén ()

>>> 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 giải nén () truy xuất chuỗi Python gốc.

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

Mô-đun bao gồm các định nghĩa có hai lớp đối tượng nén và giải nén tương ứng.

compostobj () - Hàm tạo này trả về đối tượng nén được sử dụng để nén các luồng dữ liệu. Hai phương pháp quan trọng của đối tượng này là

nén () - trả về đối tượng byte được nén.

flush () - Vì đối tượng nén xử lý các luồng, một số dữ liệu nén có thể vẫn còn trong bộ đệm. Phương thức này làm trống bộ đệm.

Ví dụ sau đây 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 đã được nén vào giá trị trả về của phương thức nén ().

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

giải nénobj () - Nó hoạt động như một phương thức khởi tạo cho đối tượng giải nén giúp giải nén dữ liệu lớn từ các luồng. Đối tượng này cung cấp các phương thức sau

giải nén () - Phương thức này trả về dữ liệu không nén

flush () - Phương thức này làm trống bộ đệm.

Mã sau truy xuất dữ liệu không 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 xác định trong mô-đun zlib cung cấp thông tin phiên bản của thư viện zlib đang được sử dụng.

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