Kursus Pengembangan Python Lanjutan
Bab
>
Tingkat
Modul Serialisasi
Modul Marshal dan Pickle
Tujuan
Pergi ke stasiun layanan dan pastikan data tersimpan dengan benar dengan menggunakan modul JSON untuk memformat berkas.
Melanjutkan di sepanjang jalan, kita menemukan beberapa stasiun yang memantau distribusi air dan kualitas tanah untuk lahan yang sedang dikembangkan untuk panen di masa depan. Untuk memproses data, efektif untuk melakukan serialisasi data. Meskipun penggunaan JSON bisa efektif sebagai solusi umum, ada juga beberapa metode serialisasi spesifik Python, yaitu modul Marshal dan Pickle. Modul Marshal dirancang untuk serialisasi/deserialisasi cepat dengan mengubah data menjadi biner, ideal untuk transfer data yang lebih sederhana. Modul Pickle lebih lambat namun dirancang untuk memproses struktur data Python yang lebih kompleks dan jauh lebih fleksibel, ideal untuk struktur data yang lebih besar atau prioritas.
Untuk menggunakan modul Marshal dan Pickle, impor fungsi-fungsinya dengan menulis: import marshal dan import pickle. Untuk keperluan kita, kita akan menggunakan fungsi-fungsi berikut:
marshal.dumps(): Menyerialisasi data ke dalam format biner, dirancang untuk kecepatan dalam Python. Menerima satu argumen, yaitu data yang ingin diserialisasi, terbatas pada tipe data dasar.marshal.loads(): Mendekode data biner menjadi tipe data yang dapat dibaca Python, terbatas pada kemampuannya tetapi eksekusinya cepat. Menerima satu argumen, yaitu data yang ingin dideserialisasi.pickle.DEFAULT_PROTOCOL: Memeriksa versi protokol untuk serialisasi Pickle yang menjadi default di versi Python Anda. Protokol mempengaruhi bagaimana data diserialisasi.pickle.HIGHEST_PROTOCOL: Memeriksa versi protokol untuk serialisasi Pickle yang tertinggi yang tersedia di versi Python Anda. Protokol mempengaruhi bagaimana data diserialisasi.pickle.dumps(): Menyerialisasi struktur data Python yang kompleks ke dalam format biner sesuai dengan protokol yang digunakan. Menerima dua argumen, yaitu data yang ingin diserialisasi dan versi protokol yang ingin digunakan saat menyerialisasi.pickle.loads(): Mendekode data biner menjadi tipe data yang dapat dibaca Python, memiliki cakupan yang kuat untuk objek Python. Menerima satu argumen, yaitu data yang ingin dideserialisasi.
Selain modul dan fungsi tersebut, kita juga akan menggunakan modul pemformatan bernama pprint, yang akan kita impor menggunakan from pprint import pprint. Ini memungkinkan kita untuk menggunakan fungsi pprint() yang dapat digunakan untuk memformat struktur data seperti dictionary sehingga kita dapat menampilkan informasi dengan jelas.
Untuk memulai, berjalanlah ke tanda X bercahaya di dalam stasiun pemantauan kecil dan hadapi terminal komputer. Stasiun tersebut memantau tekanan air dan kondisi tanah dari area sekitar yang sedang dikembangkan untuk penanaman tanaman. Terdapat sebuah konstanta yang bernama reading, yang berisi data Python yang dikumpulkan oleh stasiun.
Buatlah sebuah variabel bernama data dan simpan nilai dari fungsi marshal.dumps() dengan menetapkan reading sebagai argumen. Seperti ini: data = marshal.dumps(reading). Gunakan variabel data bersama fungsi display() yang sudah ditulis sebelumnya untuk melihat data variabel yang telah diserialisasi.
Keluar ke stasiun dan menuju ke tanda X emas, gunakan fungsi open() untuk membuka pintu dan mendapatkan akses ke kantor. Berjalanlah ke tanda X bercahaya di depan terminal, dan deseralisasikan data yang baru saja Anda serialisasi. Buatlah variabel bernama output dan simpan nilai dari marshal.loads() dengan variabel data yang sebelumnya sebagai argumen. Gunakan fungsi write() dan tambahkan output sebagai argumen untuk mengakses data yang telah diserialisasi yang Anda kumpulkan dari stasiun pemantauan.
Berjalanlah ke tanda X bercahaya di atas karpet biru di kantor, di terminal kita akan memverifikasi protokol untuk menentukan jenis serialisasi yang akan digunakan modul pickle saat memproses data. Dalam fungsi write() yang telah ditulis sebelumnya, atur argumen sebagai pickle.DEFAULT_PROTOCOL dan pickle.HIGHEST_PROTOCOL. Ini akan memverifikasi protokol serialisasi saat ini serta protokol serialisasi terbaru yang tersedia saat ini.
Lanjutkan ke tanda X gelap di atas karpet biru, sekarang setelah kita mengonfirmasi protokol, kita dapat memverifikasi data yang tersimpan. Data telah dikumpulkan dan disimpan selama beberapa bulan dan disimpan dalam sebuah konstanta bernama samples. Buat tiga variabel yang bernama: sereal_0, sereal_2 dan sereal_5 yang akan kita gunakan untuk memverifikasi tiga protokol yang tersedia untuk serialisasi. Protokol 0 menggunakan ASCII yang dapat dibaca, tidak terlalu efisien, Protokol 2 adalah format biner yang lebih efisien, dan Protokol 5 adalah yang terbaru dengan fitur paling kompleks yang ditambahkan.
Kita akan menyimpan nilai dari pickle.dumps() dan mengatur argumennya dengan konstanta samples dan protocol yang sesuai dengan angka pada nama variabel. Sebagai contoh, untuk sereal_0 kita akan menetapkan protocol sebagai 0, seperti ini: sereal_0 = pickle.dumps(samples, protocol=0). Gunakan sereal_0, sereal_2 dan sereal_5 dengan fungsi display() yang sudah ditulis sebelumnya untuk memverifikasi seberapa berbeda serialisasi untuk setiap protokol.
Berjalanlah ke tanda X bercahaya di atas karpet merah dan hadapi terminal, timpa variabel output dan simpan nilai dari pickle.loads() dengan menetapkan argumen ke sereal_5 untuk mendeserialisasi data sampel yang telah dikumpulkan sejauh ini. Gunakan fungsi display() dan tambahkan fungsi pprint() dengan variabel output untuk melihat datanya. Seperti ini: await player.display(pprint(output)). Catatlah penilaian untuk setiap bulan yang ditampilkan di terminal agar Anda dapat mencatatnya nanti.
Berjalanlah ke tanda X gelap di atas karpet merah dan hadapi meja, pada fungsi write() yang telah ditulis sebelumnya, tambahkan penilaian yang telah Anda catat untuk setiap bulan, yang sebelumnya ditampilkan di terminal. Tambahkan mereka sebagai string dengan tanda "" dalam urutan yang benar seperti yang diuraikan dalam fungsi untuk menyelesaikan level.