Kursus Pembangunan Python Lanjutan
Bab
>
Tahap

Modul Serialisasi
Modul Marshal dan Pickle

Objektif

Pergi ke stesen perkhidmatan dan memastikan data disimpan dengan betul dengan menggunakan modul JSON untuk memformat fail.

Meneruskan perjalanan di sepanjang laluan, kita menemui beberapa stesen yang memantau pengagihan air dan kualiti tanah untuk kawasan yang sedang dibangunkan bagi tuaian masa depan. Untuk memproses data dengan lebih cekap, adalah efisien untuk menyerialkan data. Walaupun menggunakan JSON boleh menjadi penyelesaian umum yang berkesan, terdapat juga beberapa kaedah penyeriusan khusus Python, iaitu modul Marshal dan Pickle. Modul Marshal direka untuk penyeriusan/deseriusan pantas dengan menukar data kepada binari, sesuai untuk pemindahan data yang lebih ringkas. Modul Pickle lebih perlahan tetapi direka untuk memproses struktur data yang lebih kompleks dan lebih fleksibel, sesuai untuk struktur data yang lebih besar atau penting.

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(): Menyeriaskan data ke dalam format binari, direka untuk kelajuan dalam Python. Mengambil satu argumen, iaitu data yang mahu anda serialkan, terhad kepada jenis data asas.
  • marshal.loads(): Mendeserialifikasi data binari ke dalam jenis data yang boleh dibaca oleh Python, terhad dari segi kebolehannya tetapi dengan pelaksanaan pantas. Mengambil satu argumen, iaitu data yang ingin dideserialkan.
  • pickle.DEFAULT_PROTOCOL: Menyemak versi protokol lalai untuk penyeriusan Pickle dalam versi Python anda. Protokol mempengaruhi cara data diseria.
  • pickle.HIGHEST_PROTOCOL: Menyemak versi protokol tertinggi untuk penyeriusan Pickle yang tersedia dalam versi Python anda. Protokol mempengaruhi cara data diseria.
  • pickle.dumps(): Menyeriaskan struktur data Python yang kompleks ke dalam format binari mengikut protokol yang digunakan. Mengambil dua argumen: data yang anda mahu serialkan dan versi protokol yang ingin anda gunakan semasa penyeriaan.
  • pickle.loads(): Mendeserialifikasi data binari ke dalam jenis data yang boleh dibaca oleh Python, berkuasa dalam skop untuk objek Python. Mengambil satu argumen, iaitu data yang ingin anda deserialkan.

Selain modul dan fungsi ini, kita juga akan menggunakan modul pemformatan bernama pformat, yang akan kita import menggunakan from pprint import pformat. Ini membolehkan kita menggunakan fungsi pformat() untuk memformat struktur data seperti kamus agar maklumat dapat dipaparkan dengan jelas.

Untuk memulakan, berjalan ke tanda X ringan di dalam stesen pemantau kecil dan hadapkan diri ke terminal komputer. Stesen ini memantau tekanan air dan keadaan tanah di kawasan sekitarnya yang sedang dibangunkan untuk penanaman tanaman. Terdapat satu konstanta bernama reading, yang mengandungi data Python yang dikumpulkan oleh stesen.

Buat satu pembolehubah bernama data dan simpan nilai fungsi marshal.dumps() dengan reading sebagai argumennya. Seperti ini: data = marshal.dumps(reading). Gunakan pembolehubah data dengan fungsi display() yang telah ditulis terlebih dahulu untuk melihat data pembolehubah yang telah diserialkan.

Keluar dari stesen dan menuju ke tanda X emas, gunakan fungsi open() untuk membuka pintu dan memasuki pejabat. Berjalan ke tanda X ringan di hadapan terminal, dan deserialkan data yang baru anda serialkan. Buat 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 diserialkan yang anda kumpulkan dari stesen pemantau.

Berjalan ke tanda X ringan di atas permaidani biru di pejabat, pada terminal kita akan mengesahkan protokol untuk menentukan jenis penyeriusan yang akan digunakan oleh modul pickle semasa memproses data. Dalam fungsi write() yang telah ditulis sebelumnya, tetapkan argumen sebagai pickle.DEFAULT_PROTOCOL dan pickle.HIGHEST_PROTOCOL. Ini akan mengesahkan protokol penyeriusan semasa serta protokol penyeriusan terbaru yang tersedia pada masa ini.

Teruskan ke tanda X gelap di atas permaidani biru. Kini bahawa kita telah mengesahkan protokol, kita boleh mengesahkan data yang disimpan. Data telah dikumpul dan disimpan sepanjang bulan dan disimpan dalam satu konstanta bernama samples. Buat tiga pembolehubah bernama: sereal_0, sereal_2 dan sereal_5; kita akan menggunakan ini untuk mengesahkan tiga protokol penyeriusan yang tersedia. Protokol 0 adalah ASCII yang boleh dibaca, tidak begitu cekap; Protokol 2 adalah format binari yang lebih cekap; dan Protokol 5 adalah yang terkini dengan ciri-ciri paling kompleks ditambahkan.

Kita akan menyimpan nilai pickle.dumps() dan menetapkan argumen sebagai konstanta samples dan protocol yang sepadan dengan nombor pada nama pembolehubah. 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 telah ditulis terlebih dahulu untuk mengesahkan bagaimana penyeriusan berbeza untuk setiap protokol.

Berjalan ke tanda X ringan di atas permaidani merah dan hadapkan diri ke terminal, timpa pembolehubah output dan simpan nilai pickle.loads() dengan menetapkan argumen kepada sereal_5 untuk mendeserialkan data sampel yang telah dikumpul setakat ini. Gunakan fungsi display() dan tambah fungsi pformat() dengan pembolehubah output untuk melihat data. Seperti ini: await player.display(pformat(output)). Catat penilaian untuk setiap bulan yang dipaparkan di terminal supaya anda boleh memplotkannya kemudian.

Berjalan ke tanda X gelap di atas permaidani merah dan hadapkan diri ke meja, dalam fungsi write() yang telah ditulis terlebih dahulu, tambahkan penilaian yang anda catatkan untuk setiap bulan yang sebelum ini dipaparkan di terminal. Tambahkan mereka sebagai rentetan dalam tanda "" mengikut susunan yang betul seperti yang digariskan dalam fungsi untuk menyelesaikan peringkat.

Buku Kod