Coding for KidsCoding for Kids
Luovat TasotHaasteetOpettajan Opas
Äänestä ominaisuuksia
Edistynyt Python-kehityskurssi
Luku
>
Taso

Sarjallistusmoduulit
Marshal- ja Pickle-moduulit

Tavoite

Mene huoltoasemalle ja varmista, että tiedot on tallennettu oikein käyttämällä JSON-moduulia tiedostojen muotoiluun.

Jatka polkua pitkin ja löydä muutamia asemia, jotka valvovat vedenjakelua ja maaperän laatua alueella, jota kehitetään tulevaa satoa varten. Tietojen käsittelemiseksi on tehokasta sarjoittaa data. Vaikka Json voi olla tehokas yleisratkaisu, on olemassa myös muutama Python-spesifinen sarjoitusmenetelmä, nimittäin Marshal- ja Pickle-moduulit. Marshal-moduuli on suunniteltu nopeaan sarjoittamiseen/desarjoittamiseen muuntamalla data binaarimuotoon, mikä sopii yksinkertaisempien tietojen siirtoon. Pickle-moduuli on hitaampi, mutta se on suunniteltu käsittelemään monimutkaisempia tietorakenteita ja on paljon joustavampi, mikä tekee siitä ihanteellisen isompien tai tärkeämpien tietorakenteiden hallintaan.

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 dataa binaarimuotoon, suunniteltu Pythonin sisäiseen nopeaan käsittelyyn. Ottaa yhden argumentin, eli sen datan, jonka haluat sarjoittaa, ja rajoittuu perusdatatyyppeihin.
  • marshal.loads(): Desarjoittaa binaaridataa Pythonin ymmärtämiin datatyyppeihin. Sen ominaisuudet ovat rajoitetut, mutta se suoritetaan nopeasti. Ottaa yhden argumentin, eli sen datan, jonka haluat desarjoittaa.
  • pickle.DEFAULT_PROTOCOL: Tarkistaa, mikä on Pickle-sarjoituksen oletusprotokollaversio Python-versiossasi. Protokollat vaikuttavat siihen, miten dataa sarjoitetaan.
  • pickle.HIGHEST_PROTOCOL: Tarkistaa, mikä on korkein saatavilla oleva Pickle-sarjoitusprotokollaversio Python-versiossasi. Protokollat vaikuttavat siihen, miten dataa sarjoitetaan.
  • pickle.dumps(): Sarjoittaa monimutkaiset Python-tietorakenteet binaarimuotoon käytetyn protokollan mukaisesti. Ottaa kaksi argumenttia, sarjoitettavat tiedot ja käytettävä protokollaversio.
  • pickle.loads(): Desarjoittaa binaaridataa Pythonin ymmärtämiin datatyyppeihin. Se on tehokas Python-olioiden käsittelyssä ja ottaa yhden argumentin, eli sen datan, jonka haluat desarjoittaa.

Näiden moduulien ja funktioiden lisäksi käytämme myös muotoilumoduulia nimeltä pprint, jonka tuomme komennolla from pprint import pprint. Tämä mahdollistaa pprint()-funktion käytön, jonka avulla voidaan muotoilla tietorakenteita, kuten sanakirjoja, jolloin tiedot tulevat esiin selkeämmin.

Aloita kävelemällä pienen valvonta-aseman sisältä löytyvälle valoisalle X-merkillä ja kohtaa tietokonepääte. Asema valvoo lähialueen vedenpainetta ja maaperän olosuhteita, kun alueella kehitetään viljelykasveja. Asemalla on vakio nimeltä reading, joka sisältää aseman keräämät Python-tiedot.

Luo muuttuja nimeltä data ja tallenna siihen marshal.dumps()-funktion arvo asettamalla argumenttina reading. Näin: data = marshal.dumps(reading). Käytä data-muuttujaa esikirjoitetun display()-funktion kanssa tarkastellaksesi sarjoitetun datan sisältöä.

Kävele ulos asemalle ja suuntaa kultaisen X-merkin luo. Käytä open()-funktiota avataksesi oven ja saadaksesi pääsyn toimistoon. Kävele tietokonepäätepisteen edessä olevalle valoisalle X-merkillä ja desarjoita juuri sarjoittamasi data. Luo muuttuja nimeltä output ja tallenna siihen marshal.loads()-funktion arvo asettamalla edellisen data-muuttujan argumenttina. Käytä write()-funktiota ja lisää output argumenttina päästäksesi käsiksi valvonta-asemalta kerättyyn sarjoitettuun dataan.

Kävele toimiston sinisen maton yli valoisalle X-merkillä. Tietokonepääte varmistaa protokollat määrittääkseen, millaista sarjoitusta Pickle-moduuli käyttää datan käsittelyssä. Esikirjoitetussa write()-funktiossa aseta argumenteiksi pickle.DEFAULT_PROTOCOL ja pickle.HIGHEST_PROTOCOL. Tämä tarkistaa, mikä on nykyinen sarjoitusprotokolla sekä mikä on käytettävissä oleva uusin sarjoitusprotokolla.

Siirry pimeälle X-merkille sinisen maton yli. Nyt kun olemme varmistaneet 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. Näitä käytetään tarkistamaan kolme saatavilla olevaa sarjoitusprotokollaa. Protokolla 0 on luettavaa ASCII-muodossa, eikä se ole kovin tehokas; protokolla 2 on tehokkaampi binaarimuodossa; ja protokolla 5 on uusin, jossa on lisätty monimutkaisempia ominaisuuksia.

Tallennamme pickle.dumps()-funktion arvon ja asetamme argumenteiksi sample-vakion sekä muuttujan nimen numeroon vastaavan protocol-arvon. 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 esikirjoitetun display()-funktion kanssa varmistaaksesi, miten sarjoituspoikkeamat vaihtelevat eri protokollien välillä.

Kävele punaisen maton yli valoisalle X-merkillä ja kohtaa tietokonepääte. Ylikirjoita output-muuttuja ja tallenna siihen pickle.loads()-funktion arvo asettamalla argumenttina sereal_5, jotta voit desarjoittaa tähän mennessä kerätyn näytedatan. Käytä display()-funktiota ja lisää pprint()-funktio output-muuttujalla, jotta data tulee näkyviin. Näin: await player.display(pprint(output)). Kiinnitä huomiota konsolissa näkyviin kuukausikohtaisiin arvosanoihin, jotta voit myöhemmin kirjata ne ylös.

Kävele punaisen maton yli pimeälle X-merkille ja kohtaa työpöytä. Esikirjoitetussa write()-funktiossa lisää aiemmin konsolissa näkyville merkityt kuukausikohtaiset arvosanat. Lisää ne merkkijonoina lainausmerkkien "" sisällä oikeassa järjestyksessä, kuten funktiossa on määritelty, jotta taso saatetaan päätökseen.

Koodikirja