Coding for KidsCoding for Kids
Creatieve LevelsUitdagingenLerarengids
Stem op functies
Gevorderde Python-ontwikkelingscursus
Hoofdstuk
>
Niveau

Serialisatie-modules
Marshal- en Pickle-modules

Doelstelling

Ga naar het service station en zorg ervoor dat de gegevens correct worden opgeslagen door gebruik te maken van de JSON-module om bestanden te formatteren.

Terwijl we verder over het pad gaan, vinden we een paar stations die de waterdistributie en bodemkwaliteit monitoren voor het land dat wordt ontwikkeld voor een toekomstige oogst. Om de gegevens te verwerken is het efficiënt om deze te serialiseren. Hoewel het gebruik van Json effectief kan zijn als een algemene oplossing, zijn er ook enkele python-specifieke serialisatiemethoden, namelijk de Marshal- en Pickle-modules. De Marshal-module is ontworpen voor snelle serialisatie/deserialisatie door de gegevens om te zetten in binair formaat, wat ideaal is voor eenvoudige gegevensoverdracht. De Pickle-module is langzamer, maar is ontworpen om complexere datastructuren te verwerken en is veel flexibeler, wat ideaal is voor grotere of prioritaire datastructuren.

Om de Marshal- en Pickle-modules te gebruiken, importeer je hun functies door te schrijven: import marshal en import pickle. Voor onze doeleinden gebruiken we de volgende functies:

  • marshal.dumps(): Serialiseert gegevens naar een binair formaat, ontworpen voor snelheid binnen python. Neemt één argument, namelijk de gegevens die je wilt serialiseren, en is beperkt tot basisgegevens types.
  • marshal.loads(): Deserialiseert binaire gegevens naar python-leesbare gegevens typen, beperkt in zijn mogelijkheden maar met een snelle uitvoering. Neemt één argument, namelijk de gegevens die gedeserialiseerd moeten worden.
  • pickle.DEFAULT_PROTOCOL: Controleert welke protocolversie voor Pickle-serialisatie standaard is in jouw Python-versie. De protocollen beïnvloeden de wijze waarop de gegevens geserialiseerd worden.
  • pickle.HIGHEST_PROTOCOL: Controleert welke protocolversie voor Pickle-serialisatie de hoogste is die beschikbaar is in jouw Python-versie. De protocollen beïnvloeden de wijze waarop de gegevens geserialiseerd worden.
  • pickle.dumps(): Serialiseert complexe python-datastructuren in binair formaat volgens het gebruikte protocol. Neemt twee argumenten, de gegevens die je wilt serialiseren en de protocolversie die je wilt gebruiken bij het serialiseren.
  • pickle.loads(): Deserialiseert binaire gegevens naar python-leesbare datatypes, krachtig in de verwerking van python-objecten. Neemt één argument, namelijk de gegevens die je wilt deserialiseren.

Naast deze modules en functies gebruiken we ook een formatteringsmodule genaamd pprint, die we importeren met from pprint import pprint. Dit stelt ons in staat de functie pprint() te gebruiken, waarmee we datastructuren zoals woordenboeken kunnen formatteren om de informatie duidelijk weer te geven.

Begin door naar het licht X-teken binnen het kleine monitoringstation te lopen en richt je op het computerterminal. Het station monitort de waterdruk en de bodemgesteldheid van het nabijgelegen terrein dat wordt ontwikkeld voor de aanplant van gewassen. Er is een constante genaamd reading, die de door het station verzamelde python-gegevens bevat.

Maak een variabele genaamd data en sla de waarde op van de functie marshal.dumps() met reading als argument. Zo: data = marshal.dumps(reading). Gebruik de variabele data met de vooraf geschreven display() functie om de geserialiseerde variabelegegevens te bekijken.

Loop het station uit en ga naar het goudkleurige X-teken, gebruik de functie open() om de deur te openen en toegang te krijgen tot het kantoor. Loop naar het licht X-teken voor het terminal en deserialiseer de gegevens die je zojuist hebt geserialiseerd. Maak een variabele aan genaamd output en sla de waarde op van marshal.loads() met de eerdere variabele data als argument. Gebruik de functie write() en voeg output als argument toe om de geserialiseerde gegevens die je van het monitoringstation hebt verzameld te openen.

Loop naar het licht X-teken over het blauwe tapijt in het kantoor, op het terminal gaan we de protocollen verifiëren om te bepalen welk type serialisatie de Pickle-module zal gebruiken bij het verwerken van gegevens. Stel in de vooraf geschreven write() functie de argumenten in als pickle.DEFAULT_PROTOCOL en pickle.HIGHEST_PROTOCOL. Dit zal verifiëren wat het huidige serialisatieprotocol is en wat het nieuwste beschikbare serialisatieprotocol is op dit moment.

Ga verder naar het donkere X-teken over het blauwe tapijt, nu we de protocollen hebben bevestigd, kunnen we de opgeslagen gegevens verifiëren. Gegevens zijn gedurende maanden verzameld en opgeslagen in een constante genaamd samples. Maak drie variabelen aan genaamd: sereal_0, sereal_2 en sereal_5. We zullen deze gebruiken om drie van de beschikbare serialisatieprotocollen te verifiëren. Protocol 0 is leesbare ASCII, niet erg efficiënt, Protocol 2 is een efficiënter binair formaat en Protocol 5 is het nieuwste met de meest complexe toevoegingen.

We zullen de waarde van pickle.dumps() opslaan en als argumenten het samples constant en het protocol dat overeenkomt met het nummer in de variabele naam instellen. Bijvoorbeeld, voor sereal_0 stellen we het protocol in op 0, als volgt: sereal_0 = pickle.dumps(samples, protocol=0). Gebruik sereal_0, sereal_2 en sereal_5 met de vooraf geschreven display() functie om te verifiëren hoe verschillend de serialisatie per protocol is.

Loop naar het licht X-teken over het rode tapijt en richt je op het terminal, overschrijf de output variabele en sla de waarde op van pickle.loads() met als argument sereal_5 om de samplegegevens te deserialiseren die tot nu toe zijn verzameld. Gebruik de display() functie en voeg de pprint() functie toe met de output variabele om de gegevens te bekijken. Zo: await player.display(pprint(output)). Noteer de beoordelingen voor elke maand die in het terminal worden weergegeven, zodat je ze later kunt noteren.

Loop naar het donkere X-teken over het rode tapijt en richt je op het bureau, voeg in de vooraf geschreven write() functie de beoordelingen toe die je hebt genoteerd voor elke maand, zoals eerder in het terminal werden weergegeven. Voeg ze toe als strings met "" aanhalingstekens in de juiste volgorde zoals ze in de functie zijn uiteengezet, om zo het level te voltooien.

Codeboek