Coding for KidsCoding for Kids
Cấp Độ Sáng TạoThử TháchHướng Dẫn Giáo Viên
Bình chọn tính năng
Khóa học Phát triển Python Nâng cao
Chương
>
Cấp độ

Các mô-đun tuần tự hóa
Các mô-đun nén

Mục tiêu

Lấy tin nhắn và lệnh và nén chúng để lưu trữ và truyền tải.

Có một số hướng dẫn xây dựng, lô hàng và bản kê khai đã được gửi đến và cần được chuyển giao hoặc lưu trữ. Mặc dù những thứ này có thể được gửi đi bằng cách gửi thủ công mọi thứ, nhưng một cách tốt để làm điều này là nén và giải nén các tệp rồi lưu trữ hoặc gửi đi. Để thực hiện điều này, bạn có thể sử dụng các module nén để giảm kích thước tệp và làm cho thông tin dễ quản lý hơn. Khác với các bài toán khác mà chúng ta đã giải quyết, nơi chúng ta đã học và sử dụng một module duy nhất, có một số module nén mà chúng ta có thể dùng với một số hàm chức năng. Chúng như sau:

Đối với tốc độ nén nhanh và mức nén thấp, hãy sử dụng module zlib, bằng cách thêm import zlib. Đối với mục đích của chúng ta, chúng ta sẽ sử dụng hàm sau: zlib.compress(), nó sử dụng một đối số, đó là thông tin bạn muốn nén. Đối số cần được nhập dưới dạng bytes thay vì chuỗi.

Đối với tốc độ nén trung bình và mức nén trung bình, hãy sử dụng module bz2, bằng cách thêm import bz2. Đối với mục đích của chúng ta, chúng ta sẽ sử dụng các hàm sau:

  • bz2.compress(), sử dụng một đối số, đó là thông tin bạn muốn nén.
  • bz2.decompress(), sử dụng một đối số, đó là thông tin bạn muốn giải nén. Đối số cần được nhập dưới dạng bytes thay vì chuỗi.

Đối số cần được nhập dưới dạng bytes thay vì chuỗi.

Đối với mức nén cao nhưng tốc độ nén chậm, hãy sử dụng module lzma, bằng cách thêm import lzma. Đối với mục đích của chúng ta, chúng ta sẽ sử dụng các lớp và hàm sau:

  • lzma.LZMACompressor(): Lớp được sử dụng để tạo các đối tượng nén, cho phép bạn kích hoạt bộ nén.
  • compress(): Sử dụng một đối số, đó là thông tin bạn muốn nén. Đối số cần được nhập dưới dạng bytes thay vì chuỗi.

Ngoài các module này, chúng ta sẽ sử dụng hàm bytes(), cho phép bạn chuyển đổi chuỗi thành bytes, điều này sẽ hữu ích cho việc nén. Hàm này nhận hai đối số, chuỗi bạn muốn chuyển đổi và định dạng, với mục đích của chúng ta là 'utf-8'.

Có ba hằng số chứa dữ liệu cần được nén, đó là red_message, blue_messagegreen_message. Để bắt đầu, hãy đi đến dấu X vàng trên thảm đỏ, tạo một biến có tên red_bytes. Lấy hằng số red_message và chuyển đổi thông điệp thành dạng bytes để dữ liệu có thể được nén, bằng cách sử dụng hàm bytes() với định dạng 'utf-8', như sau: red_bytes = bytes(red_message, 'utf-8').

Tạo một biến có tên red_compression và lưu giá trị của zlib.compress(). Sử dụng red_bytes làm đối số để nén dữ liệu, như sau: red_compression = zlib.compress(red_bytes). Sau khi dữ liệu đã được nén, hãy sử dụng hàm display() được viết sẵn trên trình soạn thảo mã và thêm các biến red_messagered_compression như các đối số để đọc thông điệp và xem dữ liệu nén.

Đi đến dấu X sáng trên thảm đỏ và đối mặt với bàn làm việc, tạo hai biến có tên: message_lengthcompression_length. Trong những biến này, chúng ta sẽ lưu độ dài ký tự của dữ liệu trước và sau khi nén bằng cách sử dụng hàm len(). Ví dụ, đối với message_length, lấy độ dài của red_message, như sau: message_length = len(red_message). Làm tương tự cho compression_length bằng cách lưu len() của red_compression.

Khi cả hai biến đã được gán giá trị, hãy sử dụng hàm write() được viết sẵn và chèn message_length cùng với compression_length như các đối số để xác nhận kích thước sau khi nén. Điều này cho thấy mức độ nén của tệp so với khi nó chưa được nén.

Đi đến dấu X tối trên thảm xanh, đối mặt với máy tính. Tạo một biến có tên blue_bytes và chuyển đổi blue_message thành dạng bytes sử dụng hàm bytes() theo cùng cách bạn đã làm với red_message. Lấy hằng số blue_message và nén nó bằng cách lưu giá trị của bz2.compress() và chèn blue_bytes làm đối số để nén dữ liệu, như sau: blue_message = bz2.compress(blue_bytes).

Tạo một biến có tên blue_decompress và lưu giá trị của bz2.decompress(), sau đó thêm blue_message làm đối số để xem dữ liệu sau khi giải nén. Thêm các biến blue_messageblue_decompress vào hàm display() được viết sẵn để xem các phiên bản dữ liệu thông điệp đã được nén và đã được giải nén.

Hãy tiến đến dấu X tối trên thảm xanh lá và tạo một đối tượng có tên compressor với giá trị lzma.LZMACompressor(), điều này sẽ tạo ra một đối tượng nén có thể sử dụng với các hàm của lzma. Tạo một biến có tên green_bytes và chuyển đổi green_message thành dạng bytes sử dụng hàm bytes() theo cùng cách bạn đã làm với red_messageblue_message.

Tạo một biến có tên green_compression và lưu giá trị của compressor.compress(), thêm green_bytes như đối số. Điều này sẽ cho phép bạn nén dữ liệu thông điệp bằng cách sử dụng đối tượng nén. Trên hàm display() được viết sẵn, thêm các biến green_messagegreen_compression như các đối số để xem thông điệp và dữ liệu đã được nén.

Đi đến dấu X sáng trên thảm xanh lá và đối mặt với bàn làm việc, hãy sửa đổi hai biến có tên: message_lengthcompression_length. Trong những biến này, chúng ta sẽ lưu độ dài ký tự của dữ liệu trước và sau khi nén bằng cách sử dụng hàm len(). Đối với message_length, lấy độ dài của green_message bằng hàm len(). Làm tương tự cho compression_length bằng cách lưu len() của green_compression. Khi cả hai biến đã được gán giá trị, hãy sử dụng hàm write() được viết sẵn và chèn message_length cùng với compression_length như các đối số để xác nhận kích thước dữ liệu đã nén và hoàn thành cấp độ.

Sách Mã