Python's Pickles

Pickles in Python zijn lekker in die zin dat ze een Python-object voorstellen als een reeks bytes. Met die bytes kunnen veel dingen worden gedaan. U kunt ze bijvoorbeeld opslaan in een bestand of database of ze over een netwerk overdragen. 

De ingesloten weergave van een Python-object wordt a genoemd augurkbestand. Het ingelegde bestand kan dus voor verschillende doeleinden worden gebruikt, zoals het opslaan van resultaten voor gebruik door een ander Python-programma of het schrijven van back-ups. Om het originele Python-object te krijgen, eenvoudig unpickle die reeks bytes.

Om in Python in te nemen, zullen we de augurk module. Zoals vermeld in de documentatie:

De pickle-module implementeert binaire protocollen voor het serialiseren en de-serialiseren van een Python-objectstructuur. "Beitsen" is het proces waarbij een Python-objecthiërarchie wordt geconverteerd naar een bytestream en "unpickling" de inverse bewerking is, waarbij een bytestream (van een binair bestand of bytes-achtig object) wordt terug geconverteerd naar een objecthiërarchie. Beitsen (en loskoppelen) is ook bekend als "serialisatie", "rangschikken" of "afvlakking"; echter, om verwarring te voorkomen, zijn de termen die hier worden gebruikt "inplukken" en "uitpakken".

De augurk module stelt ons in staat bijna elk Python-object op te slaan direct naar een bestand of string zonder de noodzaak om conversies uit te voeren. Wat de augurk module daadwerkelijk uitvoert, is wat zo genoemd wordt serialisatie van objecten, dat wil zeggen, het converteren van objecten naar en van strings van bytes. Het te peren object wordt geserialiseerd in een stroom van bytes die bijvoorbeeld naar een bestand kan worden geschreven en op een later tijdstip kan worden hersteld.

installeren augurk

De augurk module komt eigenlijk al gebundeld met uw Python-installatie. Om een ​​lijst van de geïnstalleerde modules te krijgen, typt u de volgende opdracht in de Python-prompt: helpen ( 'modules').

Dus alles wat u hoeft te doen om met de te werken augurk module is om import augurk!

Een augurkbestand maken

In dit gedeelte bekijken we enkele voorbeelden van beitsen om het concept beter te begrijpen. Laten we beginnen met het maken van een augurkbestand van een object. Ons doel hier is de Te doen lijst die we hebben gemaakt in de tutorial van de Python-lijst.

todo = ['blogpost schrijven', 'antwoord op e-mail', 'in een boek lezen']

Om ons lijstobject (Te doen), kunnen we het volgende doen:

import pickle todo = ['blogpost schrijven', 'antwoord op e-mail', 'lees in een boek'] pickle_file = bestand ('todo.pickle', 'w') pickle.dump (todo, pickle_file)

Merk op dat we een gemaakt hebben import augurk om de. te kunnen gebruiken augurk module. We hebben ook een augurkbestand gemaakt om het ingelegde object in op te slaan, namelijk todo.pickle. De stortplaats functie schrijft een ingelegde weergave van Te doen naar het geopende bestandsobject pickle_file. Met andere woorden, de stortplaats functie hier heeft twee argumenten: het object dat moet worden gepickleerd, wat het is Te doen lijst en een bestandsobject waarin we de augurk willen schrijven, namelijk todo.pickle.

Het loskoppelen (herstellen) van de ingeslagen gegevens

Zeg dat we de ingelegde gegevens willen ontkoppelen (herstellen); in ons geval is dit de Te doen lijst. Om dat te doen, kunnen we het volgende script schrijven:

import pickle pickle_file = bestand ('todo.pickle') todo = pickle.load (pickle_file) afdrukken (todo)

Het bovenstaande script geeft de Te doen lijst items:

['blogpost schrijven', 'antwoord op e-mail', 'in een boek lezen']

Zoals vermeld in de documentatie, de laad bestand) functie doet het volgende:

Lees een tekenreeks uit het geopende bestandsobjectbestand en interpreteer deze als een pekelgegevensstroom, waarbij u de oorspronkelijke objecthiërarchie reconstrueert en retourneert. Dit komt overeen met Unpickler (file) .load ().

Pickles als snaren

In het bovenstaande gedeelte hebben we gezien hoe we augurken kunnen schrijven / laden naar / van een bestand. Dit is echter niet nodig. Ik bedoel dat als we pickles willen schrijven / laden, we niet altijd te maken hebben met bestanden - we kunnen in plaats daarvan werken met augurken als touwtjes. We kunnen dus het volgende doen:

import pickle todo = ['blogpost schrijven', 'antwoord op e-mail', 'in een boek lezen'] pickled_data = pickle.dumps (todo) print (pickled_data)

Merk op dat we de stortplaatsen (met een "s" aan het einde) functie, die volgens de documentatie:

Retourneert de ingeslagen weergave van het object als een tekenreeks, in plaats van het naar een bestand te schrijven.

Om de ingelegde gegevens hierboven te herstellen, kunnen we de belastingen (string) functie, als volgt:

restored_data = pickle.loads (pickled_data)

Volgens de documentatie, wat de massa functie doet is dat het:

Leest een gebeitelde objecthiërarchie uit een tekenreeks. Tekens in de tekenreeks voorbij de representatie van het gebeitste object worden genegeerd.

Meer dan één object beitsen

In de bovenstaande voorbeelden hebben we het afbijten en herstellen (laden) van slechts één object tegelijk behandeld. In deze sectie laat ik je zien hoe we dat voor meer dan één object kunnen doen. Stel dat we de volgende objecten hebben:

name = 'Abder' website = 'http://abder.io' english_french = 'paper': 'papier', 'pen': 'stylo', 'car': 'voiture' # dictionary tup = (31, 'abder', 4.0) # tuple

Als je meer wilt weten over Python-woordenboeken en tuples, bekijk dan de volgende tutorials:

  • Een soepele opfrissing van de woordenboeken van Python
  • Een soepele opfrissing van de Tuples van Python

We kunnen de bovenstaande objecten eenvoudigweg picken door a te gebruiken serie van stortplaats functies, als volgt:

import pickle name = 'Abder' website = 'http://abder.io' english_french = 'paper': 'papier', 'pen': 'stylo', 'car': 'voiture' # dictionary tup = ( 31, 'abder', 4.0) # tuple pickled_file = open ('pickled_file.pickle', 'w') pickle.dump (naam, pickled_file) pickle.dump (website, pickled_file) pickle.dump (english_french, pickled_file) pickle. dump (tup, pickled_file)

Hiermee worden alle vier de objecten in het augurkbestand gepickt pickled_file.pickle.

Er is nog een andere prachtige manier om het bovenstaande script te schrijven met behulp van de Pickler klasse in de augurk module, als volgt:

from pickle import Pickler name = 'Abder' website = 'http://abder.io' english_french = 'paper': 'papier', 'pen': 'stylo', 'car': 'voiture' # dictionary tup = (31, 'abder', 4.0) # tuple pickled_file = open ('pickled_file.pickle', 'w') p = Pickler (pickled_file) p.dump (naam); p.dump (website); p.dump (english_french); p.dump (tup)

Om de originele gegevens te herstellen (laden), kunnen we er eenvoudig meerdere gebruiken laden functie, als volgt:

import pickle pickled_file = open ('pickled_file.pickle') naam = pickle.load (pickled_file) website = pickle.load (pickled_file) english_french = pickle.load (pickled_file) tup = pickle.load (pickled_file) print ('Naam:' ) print (naam) print ('Website:') print (website) print ('Englsh naar Frans:') print (english_french) print ('Tuple data:') print (tup)

De uitvoer van het bovenstaande script is:

Naam: Abder Website: http://abder.io Engels naar Frans: 'auto': 'voiture', 'pen': 'stylo', 'paper': 'papier' Tuple-gegevens: (31, 'abder' , 4.0)

Zoals met de Pickler klasse, we kunnen het bovenstaande script herschrijven met de Unpickler klasse in de augurk module, als volgt:

from pickle import Unpickler pickled_file = open ('pickled_file.pickle') u = Unpickler (pickled_file) name = u.load (); website = u.load (); english_french = u.load (); tup = u.load () afdrukken ('Naam:') afdrukken (naam) afdrukken ('Website:') afdrukken (website) afdrukken ('Engels naar Frans:') afdrukken (english_french) afdrukken ('Tuple-gegevens:') afdruk (tup)

Merk op dat de variabelen in dezelfde volgorde moeten worden geschreven en gelezen om de gewenste output te krijgen. Om hier problemen te voorkomen, kunnen we een woordenboek gebruiken om de gegevens als volgt te beheren:

import pickle name = 'Abder' website = 'http://abder.io' english_french = 'paper': 'papier', 'pen': 'stylo', 'car': 'voiture' # dictionary tup = ( 31, 'abder', 4.0) # tuple pickled_file = open ('pickled_file.pickle', 'w') data = 'name': naam, 'website': website, 'english_french_dictionary': english_french, 'tuple': tup  pickle.dump (data, pickled_file)

Om de in het bovenstaande script gebeitste gegevens te herstellen (laden), kunnen we het volgende doen:

import pickle pickled_file = open ('pickled_file.pickle') data = pickle.load (pickled_file) name = data ['name'] website = data ['website'] english_french = data ['english_french_dictionary'] tup = data ['tuple '] print (' Name: ') print (naam) print (' Website: ') print (website) print (' Engels naar Frans: ') print (english_french) print (' Tuple data: ') print (tup)

Pickles en panda's

Nou, dit lijkt een interessante combinatie. Als je je afvraagt ​​wat Panda's zijn, kun je meer over hen te weten komen in de Introductiecursus Panda's. De basisgegevensstructuur van panda's wordt genoemd dataframe, een tabelvormige gegevensstructuur bestaande uit geordende kolommen en rijen.

Laten we een voorbeeld nemen van dataframe uit de tutorial van Panda's:

import panda's als pd name_age = 'Naam': ['Ali', 'Bill', 'David', 'Hany', 'Ibtisam'], 'Age': [32, 55, 20, 43, 30] data_frame = pd.DataFrame (name_age)

Om onze te kunnen inpakken dataframe, we kunnen de gebruiken to_pickle () functie, als volgt:

data_frame.to_pickle ( 'my_panda.pickle')

Om het gebeitste te herstellen (laden) dataframe, we kunnen de gebruiken read_pickle () functie, als volgt:

restore_data_frame = pd.read_pickle ('my_panda.pickle')

Alles wat we in deze paragraaf hebben genoemd bij elkaar, dit is wat het script dat een Panda-object inpakt en laadt eruit ziet als:

import panda's als pd name_age = 'Naam': ['Ali', 'Bill', 'David', 'Hany', 'Ibtisam'], 'Age': [32, 55, 20, 43, 30] data_frame = pd.DataFrame (name_age) data_frame.to_pickle ('my_panda.pickle') restore_data_frame = pd.read_pickle ('my_panda.pickle') print (restore_data_frame)

Conclusie

In deze tutorial heb ik een interessante module behandeld genaamd augurk. We hebben gezien hoe gemakkelijk deze module ons in staat stelt om Python-objecten op te slaan voor verschillende doeleinden, zoals het gebruik van het object met een ander Python-programma, het overbrengen van het object over een netwerk, het opslaan van het object voor later gebruik, enz. We kunnen het Python-object eenvoudig inleggen en ontkoppelen (laden) wanneer we het oorspronkelijke object willen herstellen.

Aarzel niet om te zien wat we beschikbaar hebben voor de verkoop en voor studie in de markt, en aarzel niet om vragen te stellen en uw waardevolle feedback te geven met behulp van de onderstaande feed.