Kursus Pengembangan Python Lanjutan
Bab
>
Tingkat
Modul Serialisasi
Modul Marshal dan Pickle
Tujuan
Pergi ke stasiun layanan dan pastikan data disimpan dengan benar dengan menggunakan modul JSON untuk memformat file.
Melanjutkan perjalanan, kita menemukan beberapa stasiun yang memantau distribusi air dan kualitas tanah untuk lahan yang sedang dikembangkan untuk panen di masa depan. Untuk memproses data, efisien untuk melakukan serialisasi data. Meskipun menggunakan JSON dapat efektif sebagai solusi umum, ada beberapa metode serialisasi spesifik Python, yaitu modul Marshal dan Pickle. Modul Marshal dirancang untuk serialisasi/deserialisasi cepat dengan mengubah data menjadi format biner, ideal untuk transfer data yang lebih sederhana. Modul Pickle lebih lambat tetapi dirancang untuk memproses struktur data 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 menuliskan: import marshal dan import pickle. Untuk keperluan kita, kita akan menggunakan fungsi-fungsi berikut:
marshal.dumps(): Melakukan serialisasi 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(): Melakukan deserialisasi data biner menjadi tipe data Python yang dapat dibaca, terbatas dalam kapabilitasnya namun eksekusi cepat. Menerima satu argumen, yaitu data yang akan dideserialisasi.pickle.DEFAULT_PROTOCOL: Memeriksa versi protokol untuk serialisasi Pickle yang digunakan sebagai standar dalam versi Python Anda. Protokol memengaruhi cara data diserialisasi.pickle.HIGHEST_PROTOCOL: Memeriksa versi protokol tertinggi untuk serialisasi Pickle yang tersedia dalam versi Python Anda. Protokol memengaruhi cara data diserialisasi.pickle.dumps(): Melakukan serialisasi struktur data Python yang kompleks ke dalam format biner sesuai dengan protokol yang digunakan. Menerima dua argumen, data yang ingin diserialisasi dan versi protokol yang ingin digunakan saat serialisasi.pickle.loads(): Melakukan deserialisasi data biner menjadi tipe data Python yang dapat dibaca, sangat kuat untuk objek Python. Menerima satu argumen, yaitu data yang ingin dideserialisasi.
Selain modul dan fungsi-fungsi tersebut, kita juga akan menggunakan modul pemformatan bernama pformat, yang akan kita impor menggunakan from pprint import pformat. Ini memungkinkan kita menggunakan fungsi pformat() yang dapat digunakan untuk memformat struktur data seperti dictionary sehingga memungkinkan kita menampilkan informasi secara jelas.
Untuk memulai, berjalanlah ke tanda X yang bercahaya di dalam stasiun pemantauan kecil dan hadapi terminal komputer. Stasiun tersebut memantau tekanan air dan kondisi tanah dari daerah terdekat yang sedang dikembangkan untuk penanaman tanaman. Terdapat sebuah konstanta bernama reading, yang berisi data Python yang dikumpulkan oleh stasiun.
Buat variabel bernama data dan simpan nilai dari fungsi marshal.dumps() dengan mengatur reading sebagai argumen. Seperti ini: data = marshal.dumps(reading). Gunakan variabel data dengan fungsi display() yang sudah ditulis sebelumnya untuk melihat data variabel yang telah diserialisasi.
Keluar ke stasiun dan menuju tanda X berwarna emas, gunakan fungsi open() untuk membuka pintu dan mendapatkan akses ke kantor. Berjalanlah menuju tanda X yang bercahaya di depan terminal, dan lakukan deserialisasi data yang baru saja Anda serialisasi. Buat variabel bernama output dan simpan nilai dari marshal.loads() dengan variabel data sebelumnya sebagai argumen. Gunakan fungsi write() dan tambahkan output sebagai argumen untuk mengakses data yang telah diserialisasi yang Anda kumpulkan dari stasiun pemantauan.
Berjalanlah menuju tanda X yang bercahaya di atas karpet biru di kantor, di terminal kita akan memeriksa protokol untuk menentukan jenis serialisasi yang akan digunakan oleh modul pickle saat memproses data. Dalam fungsi write() yang sudah ditulis sebelumnya, atur argumennya sebagai pickle.DEFAULT_PROTOCOL dan pickle.HIGHEST_PROTOCOL. Ini akan memverifikasi apa 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 disimpan. Data telah dikumpulkan dan disimpan selama berbulan-bulan dan disimpan dalam sebuah konstanta bernama samples. Buat tiga variabel bernama: sereal_0, sereal_2 dan sereal_5; kita akan menggunakan ini untuk memverifikasi tiga protokol yang tersedia untuk serialisasi. Protokol 0 adalah 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 argumen sebagai konstanta samples dan protocol yang sesuai dengan nomor pada nama variabel. Sebagai contoh, untuk sereal_0 kita akan mengatur 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 perbedaan serialisasi untuk setiap protokol.
Berjalanlah menuju tanda X yang bercahaya di atas karpet merah dan hadapi terminal, timpa variabel output dan simpan nilai dari pickle.loads() dengan mengatur argumen ke sereal_5 untuk mendeserialisasi data sampel yang telah dikumpulkan sejauh ini. Gunakan fungsi display() dan tambahkan fungsi pformat() dengan variabel output untuk melihat data. Seperti ini: await player.display(pformat(output)). Catat penilaian untuk setiap bulan yang ditampilkan di terminal agar dapat Anda catat kemudian.
Berjalanlah menuju tanda X gelap di atas karpet merah dan hadapi meja, pada fungsi write() yang sudah ditulis sebelumnya, tambahkan penilaian yang sudah Anda catat untuk setiap bulan, yang sebelumnya ditampilkan di terminal. Tambahkan mereka sebagai string dengan tanda "" dalam urutan yang benar sesuai dengan yang diuraikan dalam fungsi untuk menyelesaikan level.