Kaip serijizuoti ir deserializuoti duomenis „Python“

„Python“ turi kelis būdus, kaip serijizuoti / deserializuoti duomenis. Šioje pamokoje mes pamatysime modulį maršalka ir modulis cpickle. Prieš pradėdami ieškoti serijos „Python“, trumpai paaiškinkime šią sąvoką. Serializavimas yra plačiai naudojamas procesas objektų išsaugojimui faile ar duomenų bazėje arba siuntimui per tinklą.

Atėjo laikas pradėti nuo pamokos, su kiekvienu moduliu pamatysime pavyzdį.

1. Maršalo modulis


Prieš pradėdami turėtumėte žinoti, kad šis modulis neužtikrina skirtingų „Python“ kompiliatoriaus versijų suderinamumo.

1 pavyzdys
Pažiūrėkime pirmąjį, labai paprastą pavyzdį:

 importuoti maršalo duomenis = [1, 2, 3, 4] objectBytes = marshal.dumps (duomenys) print ("Serialized:", objectBytes) objectLoad = marshal.loads (objectBytes) print ("Deserialized:", objectLoad)
Pirmiausia importuojame maršalo biblioteką, sukūrėme sąrašą, kurį ketiname serializuoti, tada nupiešiame ir deserializuojame. Funkcija sąvartynai rūpinasi serializavimu ir funkcija apkrovų deserializuoti (abu gauna objektą, kuriuo užrakinti). Labai lengva, kaip matėte. Čia yra jo vykdymo ekrano kopija:

Ir čia mes baigiame pirmuoju pavyzdžiu.

2 pavyzdys
Šiame pavyzdyje mes įrašysime objektą į failą.

 importuoti maršalo duomenis = [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 () 
Importas ir sąrašas saugomi, tik dabar ketiname naudoti failus, atidarome failą rašymui, b yra baitams, o mes išmetame sąrašą (dabar funkcija yra sąvartynas ir gauna rašytinus duomenis bei failą), kai baigiame, uždarome. Baigdami atidarome tą patį failą skaitymo režimu ir skaitome iš jo (atkreipkite dėmesį, kad funkcija yra apkrova, ir kuris gauna failą kaip parametrą), baigdami failą uždarome.

Jei pažvelgsime į failą file.dat, pamatysime šiuos dalykus:

Tinklų kūrimas nėra daug sudėtingesnis, tiesiog prisiminkite nedidelį suderinamumo apribojimą tarp „Python“ versijų. Pereikime prie kito modulio.

2. „Cpickle“ modulis


Šis modulis parašytas C kalba, yra dar vienas vadinamas marinatas, sukurtas „Python“, tačiau jis yra lėtesnis, todėl patartina naudoti „cpickle“. Skirtingai nuo maršalo, šis modulis garantuos „Python“ versijų suderinamumą, todėl prieš programavimą turime atsižvelgti į šiuos dalykus.

Pastaba„Python 3“ sistemoje „cPickle“ buvo pervadintas į „_pickle“ ir automatiškai naudojamas marinavimo moduliui.

Šio modulio atveju matysime pavyzdį, kuriame naudojame lizdus, ​​matysime serverio kodą, tik kalbama apie tai, kaip mes atliksime serijinę ar deserializaciją, todėl jis neapima klaidų tvarkymo ir naudojamas vienas pranešimas.

 importuoti lizdą importuoti marinatą s = socket.socket () s.bind (("localhost", 2016)) s.listen (1) conn, addr = s.accept () data = conn.recv (1024) print ("Duomenys gavo: ", duomenys) print (" Deserialized: ", marinuoti. įkeliami (duomenys)) s.close ()
Mes matome, kad viskas veikia kaip su įprastais lizdais, tik kad gauti duomenys bus pateikti serijiniu būdu, todėl mes deserizuojame juos naudodami funkciją apkrovų, kaip matote, jis vadinamas taip pat, kaip ir maršalo modulyje. Galiausiai pamatysime klientą:
 importuoti lizdą importuoti marinatą s = socket.socket () data = [1, 2, 3, 4] objectBytes = pickle.dumps (duomenys) s.connect (("localhost", 2016)) s.send (objectBytes) s. Uždaryti ()
Tai neturi didelių komplikacijų, mes serijuojame objektą sąvartynai ir siunčiame į sukurtą lizdą. Žemiau palieku serverio išvestį, kai klientas prisijungia, kliento išvestis ignoruojama, nes ji nieko nerodo.

Kol kas pateikiama „Python“ duomenų serijavimo ir deserializavimo pamoka, nes žinome, kad ši kalba mums labai palengvina.

PastabaPamoka naudoja versiją Python 3.5.

Ar jums patiko ir padėjo ši pamoka?Galite apdovanoti autorių paspausdami šį mygtuką, kad suteiktumėte jam teigiamą tašką

Padėsite svetainės plėtrą, dalintis puslapį su draugais

wave wave wave wave wave