Kursus Pengembangan Python Lanjutan
Bab
>
Tingkat
Modul Serialisasi
Modul Marshal dan Pickle
Tujuan
Pergi ke stasiun layanan dan pastikan data disimpan dengan benar 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, melakukan serialisasi data adalah cara yang efisien. Walaupun menggunakan Json dapat efektif sebagai solusi umum, ada juga beberapa metode serialisasi khusus Python, yaitu modul Marshal dan Pickle. Modul Marshal dirancang untuk serialisasi/deserialisasi yang 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 berprioritas.
Untuk menggunakan modul Marshal dan Pickle, impor fungsinya dengan menulis: import marshal dan import pickle. Untuk keperluan kita, kita akan menggunakan fungsi-fungsi berikut:
marshal.dumps(): Men-serialisasi data ke dalam format biner, dirancang untuk kecepatan dalam Python. Memiliki satu argumen, yaitu data yang ingin Anda serialisasi, terbatas pada tipe data dasar.marshal.loads(): Men-deserialisasi data biner menjadi tipe data yang dapat dibaca Python, terbatas dalam kemampuannya tetapi eksekusinya cepat. Memiliki satu argumen, yaitu data yang akan dide-serialisasi.pickle.DEFAULT_PROTOCOL: Memeriksa versi protokol default untuk serialisasi Pickle di versi Python Anda. Protokol ini memengaruhi cara data diserialisasi.pickle.HIGHEST_PROTOCOL: Memeriksa versi protokol tertinggi yang tersedia untuk serialisasi Pickle di versi Python Anda. Protokol ini memengaruhi cara data diserialisasi.pickle.dumps(): Men-serialisasi struktur data Python yang kompleks ke dalam format biner sesuai dengan protokol yang digunakan. Memiliki dua argumen, data yang ingin Anda serialisasi dan versi protokol yang ingin Anda gunakan saat melakukan serialisasi.pickle.loads(): Men-deserialisasi data biner menjadi tipe data yang dapat dibaca Python, dengan cakupan yang luas untuk objek Python. Memiliki satu argumen, yaitu data yang ingin Anda deserialisasi.
Selain modul dan fungsi ini, kita juga akan menggunakan modul format bernama pformat, yang akan kita impor dengan from pprint import pformat. Ini memungkinkan kita menggunakan fungsi pformat() yang dapat digunakan untuk memformat struktur data seperti kamus sehingga kita dapat menampilkan informasi dengan jelas.
Untuk memulai, berjalanlah ke tanda X terang di dalam stasiun pemantauan kecil dan hadapkan diri ke terminal komputer. Stasiun ini memantau tekanan air dan kondisi tanah dari medan sekitar yang sedang dikembangkan untuk penanaman tanaman. Ada sebuah konstanta bernama reading, yang berisi data Python yang dikumpulkan oleh stasiun.
Buat sebuah variabel bernama data dan simpan nilai dari fungsi marshal.dumps() dengan reading sebagai argumennya. Seperti ini: data = marshal.dumps(reading). Gunakan variabel data dengan fungsi display() yang telah ditulis sebelumnya untuk melihat data variabel yang telah diserialisasi.
Keluar dari stasiun dan menuju tanda X emas, gunakan fungsi open() untuk membuka pintu dan mendapatkan akses ke kantor. Berjalanlah ke tanda X terang di depan terminal, dan de-serialisasi data yang baru saja Anda serialisasikan. 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 ke tanda X terang di atas karpet biru di kantor, pada terminal kita akan memverifikasi protokol untuk menentukan jenis serialisasi yang akan digunakan modul pickle saat memproses data. Dalam fungsi write() yang sudah ditulis sebelumnya, atur argumen 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 kita telah mengonfirmasi protokol, kita dapat memverifikasi data yang telah disimpan. Data telah dikumpulkan dan disimpan selama beberapa 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.
Kami akan menyimpan nilai dari pickle.dumps() dan mengatur argumen sebagai konstanta samples dan protocol yang sesuai dengan angka pada nama variabel. Sebagai contoh, untuk sereal_0 kita akan mengatur protocol menjadi 0, seperti ini: sereal_0 = pickle.dumps(samples, protocol=0). Gunakan sereal_0, sereal_2 dan sereal_5 dengan fungsi display() yang telah ditulis sebelumnya untuk memverifikasi seberapa berbeda serialisasi untuk setiap protokol.
Berjalanlah ke tanda X terang di atas karpet merah dan hadapkan diri ke terminal, timpa variabel output dan simpan nilai dari pickle.loads() dengan argumen 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 rating untuk setiap bulan yang ditampilkan di terminal sehingga Anda dapat memetakannya nanti.
Berjalanlah ke tanda X gelap di atas karpet merah dan hadapkan diri ke meja, dalam fungsi write() yang telah ditulis sebelumnya, tambahkan rating yang telah Anda catat untuk setiap bulan yang sebelumnya ditampilkan di terminal. Tambahkan mereka sebagai string dengan tanda "" dalam urutan yang benar sesuai yang dijelaskan dalam fungsi untuk menyelesaikan level.