Kursus Pembangunan Python Lanjutan
Bab
>
Tahap
Modul Penyerialan
Modul Pemampatan
Objektif
Ambil mesej dan arahan dan mampatkan untuk pengarkiban dan penghantaran.
Terdapat beberapa arahan pembinaan, penghantaran dan manifest yang telah dihantar dan perlu dipindahkan atau diarkib. Walaupun ini boleh dihantar secara manual dengan menghantar semuanya satu persatu, cara yang baik untuk melakukan ini adalah dengan memampat dan menyahmampat fail kemudian menyimpannya atau menghantarnya. Untuk melakukan ini, anda boleh menggunakan modul mampatan untuk mengurangkan saiz fail dan memudahkan pengurusan maklumat. Berbeza dengan masalah lain yang telah kami selesaikan di mana kami mempelajari dan menggunakan satu modul, terdapat beberapa modul mampatan yang boleh kita gunakan dengan pilihan fungsi yang kecil. Ia adalah seperti berikut:
Untuk kelajuan mampatan pantas dan mampatan rendah, gunakan modul zlib dengan menambah import zlib. Untuk tujuan kita kita akan menggunakan fungsi berikut: zlib.compress(), menggunakan satu argumen, iaitu maklumat yang ingin anda mampatkan. Argumen perlu dimasukkan sebagai bait (bytes) dan bukan rentetan (string).
Untuk kelajuan mampatan sederhana dan mampatan sederhana, gunakan modul bz2 dengan menambah import bz2. Untuk tujuan kita kita akan menggunakan fungsi-fungsi berikut:
bz2.compress(), menggunakan satu argumen, iaitu maklumat yang ingin anda mampatkan.bz2.decompress(), menggunakan satu argumen, iaitu maklumat yang ingin anda mampatkan. Ia perlu dimasukkan sebagai bait (bytes) dan bukan rentetan (string).
Argumen perlu dimasukkan sebagai bait (bytes) dan bukan rentetan (string).
Untuk mampatan tinggi tetapi kelajuan mampatan perlahan, gunakan modul lzma dengan menambah import lzma. Untuk tujuan kita kita akan menggunakan kelas dan fungsi berikut:
lzma.LZMACompressor(): Kelas yang digunakan untuk mencipta objek pemampat yang membolehkan anda mengaktifkan pemampat.compress(): menggunakan satu argumen, iaitu maklumat yang ingin anda mampatkan. Ia perlu dimasukkan sebagai bait (bytes) dan bukan rentetan (string). Argumen perlu dimasukkan sebagai bait (bytes) dan bukan rentetan (string).
Selain modul-modul ini, kita akan menggunakan fungsi bytes() untuk menukarkan rentetan kepada bait (bytes) yang berguna untuk pemampatan. Ia mengambil dua argumen, rentetan yang ingin anda tukar dan format, yang bagi tujuan kita adalah 'utf-8'.
Terdapat tiga pemalar yang mengandungi data yang perlu dimampatkan, iaitu dinamakan red_message, blue_message dan green_message. Untuk memulakan, berjalan ke tanda X emas di atas karpet merah, cipta pembolehubah bernama red_bytes. Ambil pemalar red_message dan tukarkan mesej itu kepada bait (bytes) supaya data dapat dimampatkan, dengan menggunakan fungsi bytes() berformatkan 'utf-8', seperti berikut: red_bytes = bytes(red_message, 'utf-8').
Cipta pembolehubah bernama red_compression dan simpan nilai zlib.compress(). Gunakan red_bytes sebagai argumen untuk memampatkan data, seperti berikut: red_compression = zlib.compress(red_bytes). Setelah data dimampatkan, gunakan fungsi display() yang telah ditulis sedia ada dalam penyunting kod dan tambahkan pembolehubah red_message dan red_compression sebagai argumen untuk membaca mesej dan melihat data mampatan.
Berjalan ke tanda X cerah di atas karpet merah dan menghadap meja, cipta dua pembolehubah bernama: message_length dan compression_length. Dalam pembolehubah ini kita akan menyimpan panjang aksara data sebelum dan selepas mampatan menggunakan fungsi len(). Sebagai contoh, untuk message_length dapatkan panjang red_message, seperti berikut: message_length = len(red_message). Lakukan perkara yang sama untuk compression_length dengan menyimpan len() bagi red_compression.
Setelah kedua-dua pembolehubah diisi, gunakan fungsi write() sedia ada dan masukkan message_length dan compression_length sebagai argumen untuk mengesahkan saiz mampatan. Ini menunjukkan sejauh mana fail dimampatkan berbanding apabila ia tidak dimampatkan.
Berjalan ke tanda X gelap di atas karpet biru, menghadap komputer. Cipta pembolehubah bernama blue_bytes dan tukarkan blue_message kepada bait menggunakan fungsi bytes() dengan cara yang sama seperti yang anda lakukan pada red_message. Ambil pemalar blue_message dan mampatkan ia dengan menyimpan nilai bz2.compress() dan masukkan blue_bytes sebagai argumen untuk memampatkan data, seperti berikut: blue_message = bz2.compress(blue_bytes).
Cipta pembolehubah bernama blue_decompress dan simpan nilai bz2.decompress() dan tambah blue_message sebagai argumen untuk melihat data selepas penyahmampatan. Tambahkan pembolehubah blue_message dan blue_decompress kepada fungsi display() sedia ada untuk melihat varian mesej yang dimampat dan disahmampat.
Teruskan ke tanda X gelap di atas karpet hijau dan cipta objek bernama compressor dan isikan dengan lzma.LZMACompressor(), ini akan mencipta objek pemampat yang boleh digunakan dengan fungsi lzma. Cipta pembolehubah bernama green_bytes dan tukarkan green_message kepada format bait menggunakan fungsi bytes() dengan cara yang sama seperti yang anda lakukan pada red_message dan blue_message.
Cipta pembolehubah bernama green_compression dan simpan compressor.compress() sebagai nilai, tambahkan green_bytes sebagai argumen. Ini akan membolehkan anda memampatkan data mesej menggunakan objek pemampat. Pada fungsi display() sedia ada, tambahkan pembolehubah green_message dan green_compression sebagai argumen untuk melihat mesej dan data mampatan.
Berjalan ke tanda X cerah di atas karpet hijau dan menghadap meja, ubah suai dua pembolehubah bernama: message_length dan compression_length. Dalam pembolehubah ini kita akan menyimpan panjang aksara data sebelum dan selepas mampatan menggunakan fungsi len(). Untuk message_length, dapatkan panjang green_message dengan len(). Lakukan perkara yang sama untuk compression_length dengan menyimpan len() bagi green_compression. Setelah kedua-dua pembolehubah diisi, gunakan fungsi write() sedia ada dan masukkan message_length dan compression_length sebagai argumen untuk mengesahkan saiz mampatan dan menamatkan tahap.