Python heeft verschillende manieren om gegevens te serialiseren / deserialiseren. In deze tutorial gaan we de module bekijken maarschalk en de module cpickle. Voordat we kijken naar hoe te serialiseren in Python, laten we dit concept kort uitleggen. Serialisatie is een veelgebruikt proces om objecten op te slaan in een bestand of database of om ze over het netwerk te verzenden.
Het is tijd om met de tutorial te beginnen, we zullen bij elke module een voorbeeld zien.
1. Marshal-module
Voordat u begint, moet u weten dat deze module geen compatibiliteit garandeert tussen verschillende versies van de Python-compiler.
voorbeeld 1
Laten we het eerste, zeer eenvoudige voorbeeld bekijken:
import marshal data = [1, 2, 3, 4] objectBytes = marshal.dumps (data) print ("Serialized:", objectBytes) objectLoad = marshal.loads (objectBytes) print ("Deserialized:", objectLoad)Als eerste stap importeren we de marshal-bibliotheek, we hebben een lijst gemaakt die we gaan serialiseren, dan schilderen we hem en deserialiseren hem. De functie stortplaatsen zorgt voor serialisatie en de functie ladingen om te deserialiseren (beiden ontvangen het object om mee te vergrendelen). Heel gemakkelijk zoals je hebt gezien. Hier is een screenshot van de uitvoering:
En hier sluiten we af met het eerste voorbeeld.
Voorbeeld 2
In dit voorbeeld gaan we een object naar een bestand schrijven.
import marshal data = [1, 2, 3, 4] fileOut = open ("file.dat", "bw") marshal.dump (data, fileOut) fileOut.close () fileIn = open ("file.dat", "br") dataLoad = marshal.load (fileIn) print ("Deserialized:", dataLoad) fileIn.close ()De import en de lijst worden bewaard, alleen nu gaan we bestanden gebruiken, we openen een bestand om te schrijven, de B is voor bytes, en we dumpen de lijst (nu is de functie dumpen en ontvangt de gegevens om te schrijven en het bestand), wanneer we klaar zijn, sluiten we het. Om af te sluiten openen we hetzelfde bestand in leesmodus en lezen ervan (merk op dat de functie is laden, en die het bestand als parameter ontvangt), sluiten we het bestand af.
Als we naar het bestand kijken bestand.dat, zullen we het volgende zien:
Netwerken is niet veel moeilijker, onthoud alleen de kleine compatibiliteitsbeperking tussen Python-versies. Laten we verder gaan met de andere module.
2. Cpickle-module
Deze module is geschreven in C, er is een andere genaamd augurk die is ontwikkeld in Python, maar deze is langzamer, dus het is raadzaam om cpickle te gebruiken. In tegenstelling tot marshal garandeert deze module compatibiliteit tussen Python-versies, dus voordat we gaan programmeren, moeten we met deze dingen rekening houden.
OpmerkingIn Python 3 is cPickle hernoemd naar _pickle en wordt het automatisch gebruikt door de augurkmodule.
Voor deze module gaan we een voorbeeld zien, waarin we sockets gebruiken, we gaan de servercode zien, het gaat er alleen om hoe we de serialisatie of deserialisatie zouden uitvoeren, daarom bevat het geen foutafhandeling en een enkel bericht wordt gebruikt.
import socket import augurk s = socket.socket () s.bind (("localhost", 2016)) s.listen (1) conn, addr = s.accept () data = conn.recv (1024) print ("Data ontvangen: ", data) print (" Deserialized: ", pickle.loads (data)) s.close ()We zien dat alles werkt zoals met normale sockets, alleen dat de ontvangen gegevens geserialiseerd aankomen, dus we deserialiseren het met de functie ladingen, zoals je kunt zien, heet het hetzelfde als in de marshal-module. Eindelijk zien we de klant:
import socket import augurk s = socket.socket () data = [1, 2, 3, 4] objectBytes = pickle.dumps (data) s.connect (("localhost", 2016)) s.send (objectBytes) s. dichtbij ()Het heeft geen grote complicatie, we serialiseren het object met stortplaatsen en we sturen het naar de gemaakte socket. Hieronder laat ik de serveruitvoer achter wanneer een client verbinding maakt, de clientuitvoer wordt genegeerd omdat deze niets laat zien.
Tot nu toe komt de tutorial over het serialiseren en deserialiseren van gegevens in Python, omdat we weten dat deze taal het ons veel gemakkelijker maakt.
OpmerkingDe tutorial gebruikt de versie van Python 3.5.
Vond je deze Tutorial leuk en heb je eraan geholpen?Je kunt de auteur belonen door op deze knop te drukken om hem een positief punt te geven