Pickle

12.3 Pickle 

Problem: Da li ja u fajlu mogu samo da čuvam stringove, ili postoji i način da sačuvam bilo kakav objekat koji koristim u svom programu? Treba mi, želim da sačuvam na primer, listu sa najboljim rezultatima.
Rešenje: Jedno od mogućih rešenja je korišćenje Pythonovog standardnog modula koji se zove pickle. Pomoću njega možš da sačuvaš bilo kakav objekat u fajl i zatim, iz istog tog fajla ga učitati i koristiti kad zatreba. Ovo se drugačije naziva perzistentno čuvanje – tj čuvanje podataka za stalno.
Da krenemo na primer i da pokažemo kako se radi (i ovaj put, interaktivni prompt pokreni iz nekog „poznatog“ direktorijuma, slično kao što si uradio i u prošlom poglavlju kada sam ti objašnjavao fajlove).
>>> import pickle 
>>> čuvam_u = 'programdata.data' 
>>> najboljirezultati = [(150, 'Miloš'), (120, 'Jelena'), (110, 'Kozica Prasić'), (60, 'ja'), (30, 'ti')] 
>>> 
U ovom trenutku, jednostavno sam kreirao dve promenljive, jednu u kojoj čuvam ime fajla koji želim da koristim, i drugu u kojoj čuvam listu sačinjenu od tupli najboljih rezultata, na primer, u nekoj igri. Pre svega toga sam importovao modul pickle koji mi je potreban u radu.
Da bi memorisao neki objekat u nekom fajlu, prvo moram da "otvorim" taj fajl (da kreiram fajl objekt) pomoću funkcije open(), pri čemu moram voditi računa o njenim parametrima! Zbog specifičnosti objekata, i samog modula pickle, parametri su: 'b' – otvara fajl u binarnom režimu i 'w' -fajl otvoren za upisivanje:
>>> fajl = open(čuvam_u, 'wb') 
>>> 
Da bih u ovom fajlu sačuvao nešto moram pozvati funkciju dump() koja je deo pickle modula. Ovaj proces (čuvanje objekata u fajlu) se naziva pickling.
>>> pickle.dump(najboljirezultati, fajl) 
>>> fajl.close() 
>>> 
Brišemo najbolje rezultate da nam ne zauzimaju mesto u memoriji računara:
>>> del najboljirezultati 
>>> dir() 
['__builtins__', '__doc__', '__loader__', '__name__', '__package__', 'fajl', 'pickle', 'čuvam_u'] 
>>> 
Učitavanje ide suprotno. Otvaramo fajl u 'rb' binarnom režimu za čitanje, a zatim, mi moramo „učitati“ objekat pomoću load() funkcije koja je deo pickle modula, a koja će da nam vrati naš objekat. Ovaj proces (čitanje iz fajla) se naziva unpickling:
>>> f = open(čuvam_u, 'rb') 
>>> top_rez = pickle.load(f) 
>>> for i in top_rez: 
...     a, b = i 
...     print('{} ima {} poena.'.format(b, a)) 
... 
Miloš ima 150 poena. 
Jelena ima 120 poena. 
Kozica Prasić ima 110 poena. 
ja ima 60 poena. 
ti ima 30 poena. 
>>> f.close() 
>>> 
Za prikaz rezultata koristio sam for petlju, a takđe i „otpakivanje“ tupli. Prouči dobro šta se desilo i kako se desilo, videćeš, nije teško.

12.2 Fajlovi Indeks 12.4 Unicode

Коментари

Popularno

Tehnički problemi (i ostala tehnička čudesa) u najavi (i u bliskoj istoriji)

Izvršavanje Python programa

Vredela si svakoga stiha

Izbor uređivača teksta (Editora)

Kreiranje izvorne datoteke

Prevelika očekivanja

Strip o Brus Liju?

Matematički izrazi (ekspresije) u naše programu

Parametri i argumenti funkcija