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

Hỗ trợ Python cho nén bzip2 (bz2)

Bzip2 là một thuật toán mã nguồn mở để nén và giải nén các tệp. Mô-đun bz2 của Python cung cấp chức năng để triển khai thuật toán bzip2 theo lập trình.

Hàm open () là giao diện chính của mô-đun này.

Mở ()

Hàm này mở một tệp nén bzip2 và trả về một đối tượng tệp. Tệp có thể được mở ở chế độ nhị phân / văn bản với quyền đọc / ghi. Hàm thực hiện nén dựa trên đối số cấp độ nén từ 1 đến 9.

write ()

Khi tệp được mở ở chế độ ‘w’ hoặc ‘wb’, chức năng này có sẵn cho đối tượng tệp. Trong chế độ nhị phân, nó ghi dữ liệu nhị phân nén vào tệp. Ở chế độ văn bản bình thường, đối tượng tệp được bao bọc trong đối tượng TetIOWrapper để thực hiện mã hóa.

read () - Khi mở ở chế độ đọc, chức năng này đọc và trả về dữ liệu chưa nén.

Đoạn mã sau ghi dữ liệu nén vào tệp bzip2.

>>> f = bz2.open("test.bz2", "wb")
>>> data = b'Welcome to TutorialsPoint'
>>> f.write(data)
>>> f.close()

Thao tác này sẽ tạo tệp test.bz2 trong thư mục hiện tại. Bất kỳ công cụ giải nén nào cũng sẽ hiển thị tệp ‘kiểm tra’ trong đó. Để đọc dữ liệu giải nén từ tệp test.bz2 này, hãy sử dụng mã sau.

>>> f = bz2.open("test.bz2", "rb")
>>> data=f.read()
>>> data
b'Welcome to TutorialsPoint'

Mô-đun bz2 cũng định nghĩa lớp BZ2File. Đối tượng của nó hoạt động như một máy nén và bộ giải nén tùy thuộc vào tham số mode của hàm tạo.

BZ2File ()

Đây là hàm tạo. Như trong hàm open (), các tham số tệp và chế độ là bắt buộc. Mức nén theo mặc định là 9 và có thể từ 1 đến 9.

BZ2Compressor ()

Hàm này trả về đối tượng của lớp máy nén tăng dần. Mỗi lệnh gọi đến phương thức nén () trong lớp này trả về một phần dữ liệu nén. Nhiều phần có thể được nối với nhau và cuối cùng được ghi vào tệp nén bzip2.

flush ()

Phương thức này làm trống bộ đệm và trả về một đoạn dữ liệu trong đó sẽ được nối vào đối tượng nén.

BZ2Decompressor ()

Hàm này trả về đối tượng của trình giải nén gia tăng. Các đoạn dữ liệu đã được giải nén riêng lẻ được nối với nhau với dữ liệu được ghép lại tạo thành dữ liệu không được nén.

Ví dụ sau trước tiên nén từng iem trong đối tượng danh sách và ghi đối tượng byte nối vào tệp. Dữ liệu được truy xuất bởi đối tượng BZ2Decompressor.

>>> data = [b'Hello World', b'How are you?', b'welcome to Python']
>>> obj = bz2.BZ2Compressor()
>>> f = bz2.open("test.bz2", "wb")
>>> d1 = obj.compress(data[0])
>>> d2 = obj.compress(data[1])
>>> d3 = obj.compress(data[2])
>>> d4 = obj.flush()
>>> d1,d2,d3,d4
(b'', b'', b'', b'BZh91AY&SYS\x9a~\x99\x00\x00\x03\x1f\x80@\x00\x00\x00\x80@@\x80.G\x96\xa0 \x00!\xa8\xd0\x06\x9a6\x90\xa6LL\x83#\x18\x1d\x83\xee^]\x1e|\xa9\xddgu\x15G/\x1a\x8c\xd1\x90\x14\x8f\x8b\xb9"\x9c(H)\xcd?L\x80')
>>> compressedobj=d1+d2+d3+d4
>>> f.write(compressedobj)
>>> f.close()
>>> obj=bz2.BZ2DeCompressor()
>>> f=bz2.open("test.bz2", "rb")
>>> data=f.read()
>>> obj.decompress(data)
b'Hello WorldHow are you?welcome to Python'