Kursus Pengembangan Python Lanjutan
Bab
>
Tingkat
Modul Serialisasi
Modul Kompresi
Tujuan
Ambil pesan dan perintah lalu kompres untuk arsip dan transmisi.
Ada beberapa instruksi konstruksi, pengiriman, dan manifest yang telah dikirim dan perlu untuk dipindahkan atau diarsipkan. Meskipun ini bisa dikirim dengan cara manual mengirim semuanya, salah satu cara yang baik untuk melakukannya adalah dengan mengompres dan mendekompres file kemudian menyimpannya atau mengirimkannya. Untuk melakukan ini, Anda dapat menggunakan modul kompresi untuk mengurangi ukuran file dan membuat informasi lebih mudah dikelola. Berbeda dengan masalah lain yang kita selesaikan di mana kita mempelajari dan menggunakan satu modul, ada beberapa modul kompresi yang bisa kita gunakan dengan pilihan fungsi yang kecil. Modul-modul tersebut adalah sebagai berikut:
Untuk kecepatan kompresi yang cepat dan kompresi yang rendah, gunakan modul zlib, dengan menambahkan import zlib. Untuk keperluan kita, kita akan menggunakan fungsi berikut: zlib.compress(), yang menggunakan satu argumen, yaitu informasi yang ingin Anda kompres. Argumen harus dimasukkan sebagai bite alih-alih string.
Untuk kecepatan kompresi sedang dan kompresi yang sedang, gunakan modul bz2, dengan menambahkan import bz2. Untuk keperluan kita, kita akan menggunakan fungsi-fungsi berikut:
bz2.compress(), menggunakan satu argumen, yaitu informasi yang ingin Anda kompres.bz2.decompress(), menggunakan satu argumen, yaitu informasi yang ingin Anda dekompres. Fungsi ini harus dimasukkan sebagai bite alih-alih string.
Argumen harus dimasukkan sebagai bite alih-alih string.
Untuk kompresi tinggi namun kecepatan kompresi yang lambat, gunakan modul lzma, dengan menambahkan import lzma. Untuk keperluan kita, kita akan menggunakan kelas dan fungsi berikut:
lzma.LZMACompressor(): Kelas yang digunakan untuk membuat objek kompresi yang memungkinkan Anda untuk mengaktifkan kompresor.compress(): menggunakan satu argumen, yaitu informasi yang ingin Anda kompres. Fungsi ini harus dimasukkan sebagai bite alih-alih string. Argumen harus dimasukkan sebagai bite alih-alih string.
Selain modul-modul tersebut, kita juga akan menggunakan fungsi bytes(), yang memungkinkan Anda untuk mengonversi string menjadi byte yang akan berguna untuk proses kompresi. Fungsi ini mengambil dua argumen, string yang ingin Anda konversi dan format, yang untuk keperluan kita adalah 'utf-8'.
Ada tiga konstanta yang berisi data yang perlu dikompres, yang dinamai red_message, blue_message dan green_message. Untuk memulai, berjalanlah ke tanda X emas di atas karpet merah, buatlah sebuah variabel bernama red_bytes. Ambil konstanta red_message dan konversikan pesan tersebut menjadi byte sehingga data dapat dikompres, dengan menggunakan fungsi bytes() yang diformat ke 'utf-8', seperti ini: red_bytes = bytes(red_message, 'utf-8').
Buatlah sebuah variabel bernama red_compression dan simpan nilai dari zlib.compress(). Gunakan red_bytes sebagai argumen yang akan mengompres data, seperti ini: red_compression = zlib.compress(red_bytes). Setelah data dikompres, gunakan fungsi display() yang telah ditulis sebelumnya pada editor kode dan tambahkan variabel red_message dan red_compression sebagai argumen untuk membaca pesan dan melihat data kompresi.
Berjalanlah ke tanda X terang di atas karpet merah dan hadapilah meja, buat dua variabel bernama: message_length dan compression_length. Dalam variabel-variabel ini kita akan menyimpan panjang karakter data baik sebelum maupun sesudah kompresi menggunakan fungsi len(). Sebagai contoh, untuk message_length ambil panjang dari red_message, seperti ini: message_length = len(red_message). Lakukan hal yang sama untuk compression_length dengan menyimpan hasil len() dari red_compression.
Setelah kedua variabel terisi, gunakan fungsi write() yang telah ditulis sebelumnya dan masukkan message_length dan compression_length sebagai argumen untuk memverifikasi ukuran kompresi. Ini menunjukkan seberapa banyak file dikompres relatif terhadap ketika file dibiarkan tanpa kompresi.
Berjalanlah ke tanda X gelap di atas karpet biru, hadapilah komputer. Buat sebuah variabel bernama blue_bytes dan konversikan blue_message menjadi byte menggunakan fungsi bytes() dengan cara yang sama seperti yang Anda lakukan dengan red_message. Ambil konstanta blue_message dan kompres dengan menyimpan nilai dari bz2.compress() dan memasukkan blue_bytes sebagai argumen untuk mengompres data, seperti ini: blue_message = bz2.compress(blue_bytes).
Buatlah sebuah variabel bernama blue_decompress dan simpan nilai dari bz2.decompress() dan tambahkan blue_message sebagai argumen untuk melihat data setelah dekompresi. Tambahkan variabel blue_message dan blue_decompress ke fungsi display() yang telah ditulis sebelumnya untuk melihat varian pesan yang telah dikompres dan didekompres.
Bergeraklah ke tanda X gelap di atas karpet hijau dan buat sebuah objek bernama compressor dan isilah dengan lzma.LZMACompressor(), ini akan membuat objek kompresor yang dapat digunakan dengan fungsi-fungsi lzma. Buat sebuah variabel bernama green_bytes dan ubah green_message menjadi format byte menggunakan fungsi bytes() dengan cara yang sama seperti yang Anda lakukan dengan red_message dan blue_message.
Buatlah sebuah variabel bernama green_compression dan simpan nilai dari compressor.compress() dengan menambahkan green_bytes sebagai argumen. Ini akan memungkinkan Anda mengompres data pesan menggunakan objek kompresor. Pada fungsi display() yang telah ditulis sebelumnya, tambahkan variabel green_message dan green_compression sebagai argumen untuk melihat pesan dan data yang telah dikompres.
Berjalanlah ke tanda X terang di atas karpet hijau dan hadapilah meja, modifikasilah kedua variabel bernama: message_length dan compression_length. Dalam variabel-variabel ini kita akan menyimpan panjang karakter data baik sebelum maupun sesudah kompresi menggunakan fungsi len(). Untuk message_length ambil panjang dari green_message dengan len(). Lakukan hal yang sama untuk compression_length dengan menyimpan hasil len() dari green_compression. Setelah kedua variabel terisi, gunakan fungsi write() yang telah ditulis sebelumnya dan masukkan message_length dan compression_length sebagai argumen untuk memverifikasi ukuran kompresi dan menyelesaikan level.