Kursus Pembangunan Python Lanjutan
Bab
>
Tahap
Modul Serialisasi
Modul Marshal dan Pickle
Objektif
Pergi ke stesen servis dan pastikan data disimpan dengan betul dengan menggunakan modul JSON untuk memformat fail.
Sambil meneruskan di sepanjang laluan, kita menemui beberapa stesen yang memantau pengedaran air dan kualiti tanah untuk tanah yang sedang dibangunkan untuk tuai masa depan. Untuk memproses data, adalah lebih efisien untuk menseri data tersebut. Walaupun menggunakan Json boleh berkesan sebagai penyelesaian am, terdapat juga beberapa kaedah penyiri yang khusus untuk python, iaitu modul Marshal dan Pickle. Modul Marshal direka untuk penyiri/nyahpenyiri yang cepat dengan menukarkan data ke dalam bentuk binari, sesuai untuk pemindahan data yang lebih mudah. Modul Pickle adalah lebih perlahan tetapi direka untuk memproses struktur data python yang lebih kompleks dan lebih fleksibel, sesuai untuk struktur data yang lebih besar atau yang diberi keutamaan.
Untuk menggunakan modul Marshal dan Pickle, import fungsi mereka dengan menulis: import marshal dan import pickle. Untuk tujuan kita, kita akan menggunakan fungsi-fungsi berikut:
marshal.dumps(): Menseri data ke dalam format binari, direka untuk kelajuan dalam python. Mengambil satu argumen, iaitu data yang ingin anda seri, yang terhad kepada jenis data asas.marshal.loads(): Menyahpenyiri data binari kepada jenis data yang boleh dibaca oleh python, terhad pada kemampuannya tetapi dengan pelaksanaan yang cepat. Mengambil satu argumen, iaitu data untuk dinyahseri.pickle.DEFAULT_PROTOCOL: Menyemak versi protokol untuk penyiri Pickle yang lalai dalam versi Python anda. Protokol mempengaruhi cara data disiri.pickle.HIGHEST_PROTOCOL: Menyemak versi protokol untuk penyiri Pickle yang tertinggi yang tersedia dalam versi Python anda. Protokol mempengaruhi cara data disiri.pickle.dumps(): Menseri struktur data python yang kompleks dalam format binari mengikut protokol yang digunakan. Mengambil dua argumen, data yang ingin anda seri dan versi protokol yang ingin anda gunakan ketika menyiri.pickle.loads(): Menyahpenyiri data binari kepada jenis data yang boleh dibaca oleh python, dengan keupayaan yang luas untuk objek python. Mengambil satu argumen, iaitu data yang ingin anda nyahseri.
Selain modul-modul dan fungsi-fungsi ini, kita juga akan menggunakan modul pemformatan yang dipanggil pprint, yang akan kita import menggunakan from pprint import pprint. Ini membolehkan kita menggunakan fungsi pprint() yang boleh digunakan untuk memformat struktur data seperti kamus agar maklumat dipaparkan dengan jelas.
Untuk memulakan, berjalanlah ke arah tanda X yang bercahaya di dalam stesen pemantauan kecil dan hadap terminal komputer. Stesen itu memantau tekanan air dan keadaan tanah di kawasan berhampiran yang sedang dibangunkan untuk penanaman tanaman. Terdapat satu pemalar bernama reading, yang mengandungi data python yang dikumpulkan oleh stesen itu.
Ciptakan satu pembolehubah bernama data dan simpan nilai fungsi marshal.dumps() dengan menetapkan reading sebagai argumen. Seperti ini: data = marshal.dumps(reading). Gunakan pembolehubah data dengan fungsi display() yang telah ditulis terlebih dahulu untuk melihat data pembolehubah yang telah disiri.
Berjalan keluar ke stesen dan menuju ke tanda X emas, gunakan fungsi open() untuk membuka pintu dan mendapatkan akses ke pejabat. Berjalan ke tanda X yang bercahaya di depan terminal, dan nyahpenyiri data yang baru saja anda siri. Ciptakan satu pembolehubah bernama output dan simpan nilai fungsi marshal.loads() dengan pembolehubah data sebelumnya sebagai argumen. Gunakan fungsi write() dan tambahkan output sebagai argumen untuk mengakses data yang telah disiri yang dikumpulkan dari stesen pemantauan.
Berjalan ke tanda X yang bercahaya di atas karpet biru di pejabat, pada terminal kita akan mengesahkan protokol untuk menentukan jenis penyiri yang akan digunakan oleh modul pickle semasa memproses data. Dalam fungsi write() yang telah ditulis terlebih dahulu, tetapkan argumen sebagai pickle.DEFAULT_PROTOCOL dan pickle.HIGHEST_PROTOCOL. Ini akan mengesahkan apakah protokol penyiri semasa dan juga protokol penyiri terkini yang tersedia pada masa ini.
Bergerak ke tanda X yang gelap di atas karpet biru, kini setelah kita mengesahkan protokol, kita boleh mengesahkan data yang disimpan. Data telah dikumpulkan dan disimpan sepanjang bulan-bulan dan disimpan dalam satu pemalar bernama samples. Ciptakan tiga pembolehubah bernama: sereal_0, sereal_2 dan sereal_5 yang akan kita gunakan untuk mengesahkan tiga protokol yang tersedia untuk penyiri. Protokol 0 adalah ASCII yang mudah dibaca, tetapi tidak begitu efisien; Protokol 2 adalah format binari yang lebih efisien; dan Protokol 5 adalah yang terbaru dengan ciri-ciri paling kompleks yang telah ditambah.
Kita akan menyimpan nilai fungsi pickle.dumps() dan menetapkannya dengan argumen pemalar samples dan protocol yang sepadan dengan nombor pada nama pembolehubah. Contohnya, 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 telah ditulis terlebih dahulu untuk mengesahkan perbezaan penyiri bagi setiap protokol.
Berjalan ke tanda X yang bercahaya di atas karpet merah dan hadap terminal, timpa pembolehubah output dan simpan nilai fungsi pickle.loads() dengan menetapkan argumennya kepada sereal_5 untuk menyahpenyiri data sampel yang telah dikumpulkan setakat ini. Gunakan fungsi display() dan tambahkan fungsi pprint() dengan pembolehubah output untuk melihat data. Seperti ini: await player.display(pprint(output)). Catatkan penilaian untuk setiap bulan yang dipaparkan di terminal supaya anda boleh merekodnya kemudian.
Berjalan ke tanda X yang gelap di atas karpet merah dan hadap meja, pada fungsi write() yang telah ditulis terlebih dahulu, tambahkan penilaian yang telah anda catat untuk setiap bulan, yang dipaparkan sebelum ini di terminal. Tambahkan mereka sebagai rentetan dengan tanda "" dalam urutan yang betul seperti yang digariskan dalam fungsi untuk melengkapkan tahap.