Curs Avansat de Dezvoltare Python
Capitolul
>
Nivel

Module de serializare
Modulele Marshal și Pickle

Obiectiv

Mergi la stația de service și asigură-te că datele sunt stocate corect folosind modulul JSON pentru a formata fișierele.

Continuând pe traseu, întâlnim câteva stații care monitorizează distribuția apei și calitatea solului pentru terenul care este dezvoltat pentru o recoltă viitoare. Pentru a procesa datele este eficient să serializăm informațiile. Deși utilizarea lui Json poate fi o soluție eficientă și generalizată, există și câteva metode de serializare specifice Python, anume modulele Marshal și Pickle. Modulul Marshal este conceput pentru serializare/deserializare rapidă prin transformarea datelor în format binar, ideal pentru transferuri mai simple de date. Modulul Pickle este mai lent, dar este proiectat să proceseze structuri de date mai complexe și este mult mai flexibil, ideal pentru structuri de date mai mari sau prioritare.

Pentru a folosi modulele Marshal și Pickle, importă funcțiile lor scriind: import marshal și import pickle. Pentru scopurile noastre, vom folosi următoarele funcții:

  • marshal.dumps(): Serializează datele într-un format binar, conceput pentru viteză în cadrul Python. Primește un argument, acela fiind datele pe care dorești să le serializezi, fiind limitat la tipuri de date de bază.
  • marshal.loads(): Deserializează datele binare în tipuri de date citibile de Python, având capacități limitate, dar cu execuție rapidă. Primește un argument, acela fiind datele de deserialize.
  • pickle.DEFAULT_PROTOCOL: Verifică ce versiune de protocol pentru serializarea Pickle este implicită în versiunea ta de Python. Protocoalele influențează modul în care datele sunt serialize.
  • pickle.HIGHEST_PROTOCOL: Verifică ce versiune de protocol pentru serializarea Pickle este cea mai înaltă disponibilă în versiunea ta de Python. Protocoalele influențează modul în care datele sunt serialize.
  • pickle.dumps(): Serializează structuri de date complexe din Python în format binar, conform protocolului folosit. Primește două argumente, datele pe care dorești să le serializezi și versiunea protocolului pe care dorești să o folosești la serializare.
  • pickle.loads(): Deserializează datele binare în tipuri de date citibile de Python, oferind o putere sporită la procesarea obiectelor Python. Primește un argument, acela fiind datele pe care dorești să le deserializezi.

În plus față de aceste module și funcții, vom folosi și un modul de formatare numit pformat, pe care îl vom importa folosind from pprint import pformat. Acest lucru ne permite să utilizăm funcția pformat() care poate fi folosită pentru a formata structuri de date precum dicționarele, permițându-ne să afișăm informațiile clar.

Pentru a porni, mergi la marca X luminoasă din stația mică de monitorizare și îndreaptă-te spre terminalul computerului. Stația monitorizează presiunea apei și condițiile solului din zona apropiată care este dezvoltată pentru plantarea culturilor. Există o constantă numită reading, care conține datele Python colectate de stație.

Creează o variabilă numită data și stochează valoarea funcției marshal.dumps() setând reading ca argument. Așa: data = marshal.dumps(reading). Folosește variabila data împreună cu funcția predefinită display() pentru a vizualiza datele variabilei serializate.

Mergi din stație și îndreaptă-te către marca X de culoare aurie, folosește funcția open() pentru a deschide ușa și a obține acces la birou. Mergi la marca X luminoasă din fața terminalului și deserializează datele pe care tocmai le-ai serializat. Creează o variabilă numită output și stochează valoarea funcției marshal.loads() setând variabila data ca argument. Folosește funcția write() și adaugă output ca argument pentru a accesa datele serializate pe care le-ai colectat de la stația de monitorizare.

Mergi la marca X luminoasă peste covorul albastru din birou; la terminal vom verifica protocoalele pentru a determina ce tip de serializare va folosi modulul pickle atunci când procesează datele. În funcția predefinită write(), setează argumentele ca pickle.DEFAULT_PROTOCOL și pickle.HIGHEST_PROTOCOL. Acest lucru va verifica ce protocol de serializare este folosit în prezent, precum și cel mai recent protocol de serializare disponibil la momentul actual.

Mergi la marca X întunecată peste covorul albastru; acum că am confirmat protocoalele, putem verifica datele stocate. Datele au fost colectate și stocate de-a lungul lunilor într-o constantă numită samples. Creează trei variabile numite: sereal_0, sereal_2 și sereal_5 pe care le vom folosi pentru a verifica trei dintre protocoalele disponibile pentru serializare. Protocolul 0 este ASCII lizibil, nu foarte eficient, Protocolul 2 este un format binar mai eficient, iar Protocolul 5 este cel mai recent, cu cele mai complexe funcționalități adăugate.

Vom stoca valoarea funcției pickle.dumps() și vom seta ca argumente constanta sample și protocolul corespunzător numărului din denumirea variabilei. De exemplu, pentru sereal_0 vom seta protocolul ca 0, astfel: sereal_0 = pickle.dumps(samples, protocol=0). Folosește variabilele sereal_0, sereal_2 și sereal_5 împreună cu funcția predefinită display() pentru a verifica cât de diferită este serializarea pentru fiecare protocol.

Mergi la marca X luminoasă peste covorul roșu și îndreaptă-te spre terminal, suprascrie variabila output și stochează valoarea funcției pickle.loads() setând ca argument sereal_5 pentru a deserialize datele de probă colectate până acum. Folosește funcția display() și adaugă funcția pformat() cu variabila output pentru a vizualiza datele. Așa: await player.display(pformat(output)). Notează evaluările pentru fiecare lună afișate în terminal, astfel încât să le poți nota ulterior.

Mergi la marca X întunecată peste covorul roșu și îndreaptă-te spre birou; la funcția predefinită write(), adaugă evaluările notate pentru fiecare lună, care au fost afișate anterior în terminal. Adaugă-le ca șiruri de caractere incluse între ghilimele "" în ordinea corectă, așa cum sunt prezentate în funcție, pentru a finaliza nivelul.

Carte de Cod