Hoe Pickle te gebruiken om objecten in Python op te slaan

Pickle, standaard onderdeel van de Python-bibliotheek, is een belangrijke module wanneer u persistentie tussen gebruikerssessies nodig hebt. Als module zorgt pickle voor het opslaan van Python-objecten tussen processen.

Of u nu programmeert voor een database, game, forum of een andere toepassing die informatie tussen sessies moet opslaan, augurk is handig voor het opslaan van ID's en instellingen. De augurkmodule kan dingen opslaan zoals gegevenstypen zoals Booleans, tekenreeksen en byte-arrays, lijsten, woordenboeken, functies en meer.

Notitie: Het concept beitsen wordt ook wel serialisatie, marshaling en flattening genoemd. Het punt is echter altijd hetzelfde: een object opslaan in een bestand om later te worden opgehaald. Met beitsen wordt dit bereikt door het object te schrijven als een lange stroom bytes. 

Augurk voorbeeldcode in Python

Om een ​​object naar een bestand te schrijven, gebruikt u een code in de volgende syntaxis:

augurk importeren
object = Object ()
filehandler = open (bestandsnaam, 'w')
pickle.dump (object, filehandler)

Dit is hoe een voorbeeld uit de echte wereld eruit ziet:

augurk importeren
wiskunde importeren
object_pi = math.pi
file_pi = open ('bestandsnaam_pi.obj', 'w')
pickle.dump (object_pi, file_pi)

Dit fragment schrijft de inhoud van object_pi naar het bestand handler file_pi, die op zijn beurt is gebonden aan het bestand filename_pi.obj in de directory van uitvoering.

Om de waarde van het object in het geheugen te herstellen, laadt u het object uit het bestand. Ervan uitgaande dat augurk nog niet is geïmporteerd voor gebruik, begint u met het importeren:

augurk importeren
filehandler = open (bestandsnaam, 'r')
object = pickle.load (filehandler)

De volgende code herstelt de waarde van pi:

augurk importeren
file_pi2 = open ('bestandsnaam_pi.obj', 'r')
object_pi2 = pickle.load (file_pi2)

Het object is dan weer klaar voor gebruik, dit keer als object_pi2. Je kunt natuurlijk de originele namen hergebruiken, als je dat liever hebt. Dit voorbeeld gebruikt duidelijke namen voor de duidelijkheid.

Dingen om te onthouden over augurk

Houd deze dingen in gedachten wanneer u de augurkmodule gebruikt:

  • Het augurkprotocol is specifiek voor Python - het is niet gegarandeerd compatibel met meerdere talen. U kunt de informatie waarschijnlijk niet overdragen om deze nuttig te maken in Perl, PHP, Java of andere talen.
  • Er is ook geen garantie voor compatibiliteit tussen verschillende versies van Python. ITe incompatibiliteit bestaat omdat niet elke Python-datastructuur door de module kan worden geserialiseerd.
  • Standaard wordt de nieuwste versie van het augurkprotocol gebruikt. Dat blijft zo, tenzij u het handmatig wijzigt.

Tip: Ontdek ook hoe u shelve kunt gebruiken om objecten in Python op te slaan voor een andere methode om de continuïteit van objecten te handhaven.