Edistynyt Python-kehityskurssi
Luku
>
Taso
Serialisointimoduulit
Marshal ja Pickle-moduulit
Tavoite
Siirry huoltoasemalle ja varmista, että data on tallennettu oikein käyttämällä JSON-moduulia tiedostojen muotoiluun.
Jatkaessasi polkua löydämme muutamia asemia, jotka seuraavat vedenjakelua ja maaperän laatua alueella, jota kehitetään tulevaa sadonkorjuuta varten. Datan käsittelemiseksi on tehokasta sarjoittaa data. Vaikka Jsonin käyttö voi olla tehokas yleisratkaisu, on olemassa myös muutamia Pythonin erityisiä sarjoitusmenetelmiä, nimittäin Marshal- ja Pickle-moduulit. Marshal-moduuli on suunniteltu nopeaan sarjoittamiseen/desarjoittamiseen muuntamalla data binäärimuotoon, mikä on ihanteellista yksinkertaisempien datasiirtojen toteutuksessa. Pickle-moduuli on hitaampi, mutta se on suunniteltu käsittelemään monimutkaisempia tietorakenteita ja on paljon joustavampi, joten se sopii suurempien tai priorisoitujen tietorakenteiden käsittelyyn.
Käyttääksesi Marshal- ja Pickle-moduuleja, tuo niiden funktiot kirjoittamalla: import marshal ja import pickle. Tarkoituksiimme käytämme seuraavia funktioita:
marshal.dumps(): Sarjoittaa datan binäärimuotoon, suunniteltu nopeaksi Pythonin sisällä. Ottaa yhden argumentin, joka on sarjoitettava data, ja on rajoitettu perusdatatyyppeihin.marshal.loads(): Desarjoittaa binääridatan Pythonin luettaviksi tietotyypeiksi, rajalliset ominaisuudet mutta nopea suoritus. Ottaa yhden argumentin, joka on desarjoitettava data.pickle.DEFAULT_PROTOCOL: Tarkistaa, mikä Pickle-sarjauksen oletusprotokollaversio on Python-versiossasi. Protokollat vaikuttavat siihen, miten data sarjoitetaan.pickle.HIGHEST_PROTOCOL: Tarkistaa, mikä Pickle-sarjauksen korkein käytettävissä oleva protokollaversio on Python-versiossasi. Protokollat vaikuttavat datan sarjaukseen.pickle.dumps(): Sarjoittaa monimutkaisia Python-tietorakenteita binäärimuotoon käytetyn protokollan mukaisesti. Ottaa kaksi argumenttia: sarjoitettavan datan ja sarjauksessa käytettävän protokollan version.pickle.loads(): Desarjoittaa binääridatan Pythonin luettaviksi tietotyypeiksi, tehokas Python-objektien käsittelyssä. Ottaa yhden argumentin, joka on desarjoitettava data.
Näiden moduulien ja funktioiden lisäksi käytämme myös muotoilumoduulia nimeltä pformat, jonka tuomme käyttämällä from pprint import pformat. Tämä sallii meidän käyttää pformat()-funktiota, jota voidaan hyödyntää tietorakenteiden, kuten sanakirjojen, muotoiluun ja tietojen selkeään esittämiseen.
Aloittaaksesi kävele valoa kohti X-merkkiä pienen valvontapaikan sisällä ja suuntaa tietokonepäätepisteeseen. Asema seuraa vedenpainetta ja maaperän olosuhteita läheisellä alueella, jota kehitetään kasvien istutusta varten. On olemassa vakio nimeltä reading, joka sisältää asemalla kerättyä Python-dataa.
Luo muuttuja nimeltä data ja tallenna siihen marshal.dumps()-funktion arvo asettamalla reading argumentiksi. Näin: data = marshal.dumps(reading). Käytä data-muuttujaa ennalta kirjoitetun display()-funktion kanssa nähdäksesi sarjatun muuttujan datan.
Kävele ulos asemalle ja suuntaa kultaisen X-merkin luo, käytä open()-funktiota avataksesi oven ja päästäksesi toimistoon. Kävele valoa kohti X-merkkiä tietokonepäätepisteen edessä ja desarjoita juuri sarjoittamasi data. Luo muuttuja nimeltä output ja tallenna siihen marshal.loads()-funktion arvo, käyttäen edellistä data-muuttujaa argumenttina. Käytä write()-funktiota ja lisää output argumenttina, jotta pääset käsiksi asemalta kerättyyn sarjattuun dataan.
Kävele valoa kohti X-merkkiä sinisen maton päällä toimistossa, tietokonepäätepisteellä varmistamme protokollat määrittääksemme, millaista sarjausta pickle-moduuli käyttää datan käsittelyssä. Ennalta kirjoitetussa write()-funktiossa aseta argumenteiksi pickle.DEFAULT_PROTOCOL ja pickle.HIGHEST_PROTOCOL. Tämä todentaa, mikä on nykyinen sarjauksen protokolla sekä uusin saatavilla oleva protokolla tällä hetkellä.
Siirry tummaan X-merkkiin sinisen maton päällä, nyt kun olemme vahvistaneet protokollat, voimme tarkistaa tallennetun datan. Dataa on kerätty ja tallennettu kuukausien ajan vakioon nimeltä samples. Luo kolme muuttujaa nimeltä: sereal_0, sereal_2 ja sereal_5, joita käytämme kolmen sarjaukseen saatavilla olevan protokollan varmentamiseen. Protokolla 0 on luettavaa ASCII:ta, ei kovin tehokas, protokolla 2 on tehokkaampi binäärimuoto ja protokolla 5 on uusin, jossa on lisätty monimutkaisimmat ominaisuudet.
Tallennamme pickle.dumps()-funktion arvon asettamalla argumenteina vakio samples ja muuttujanimessä olevan numeron mukainen protocol. Esimerkiksi, sereal_0:lle asetamme protocol arvoksi 0, näin: sereal_0 = pickle.dumps(samples, protocol=0). Käytä sereal_0, sereal_2 ja sereal_5 ennalta kirjoitetun display()-funktion kanssa varmistaaksesi, kuinka eroavaista sarjaus on kullekin protokollalle.
Kävele valoa kohti X-merkkiä punaisen maton päällä ja suuntaa tietokonepäätepisteeseen, ylikirjoita output-muuttuja ja tallenna siihen pickle.loads()-funktion arvo asettamalla argumentiksi sereal_5, jotta desarjoitat tähän mennessä kerätyn näyte-datan. Käytä display()-funktiota ja lisää pformat()-funktio output-muuttujan kanssa, jotta näet datan. Näin: await player.display(pformat(output)). Merkitse ylös kunkin kuukauden arvosanat, jotka näytetään tietokonepäätepisteessä, jotta voit kaaviossa esittää ne myöhemmin.
Kävele tummalle X-merkille punaisen maton päällä ja suuntaa pöydän luokse, ennalta kirjoitetussa write()-funktiossa lisää kunkin kuukauden arvosanat, jotka merkasit ylös ja jotka aiemmin näytettiin tietokonepäätepisteessä. Lisää ne merkkijonoina "" -merkeillä oikeassa järjestyksessä sen mukaisesti, kuten funktiossa on kuvattu, jotta saat tason suoritettua.