Kā sērijveidot un deserializēt datus Python

Python ir vairāki veidi, kā serializēt / deserializēt datus. Šajā apmācībā mēs apskatīsim moduli maršals un modulis cpickle. Pirms skatāties, kā sērijveidot Python, īsi izskaidrosim šo jēdzienu. Serializācija ir plaši izmantots process objektu saglabāšanai failā vai datu bāzē vai nosūtīšanai tīklā.

Ir pienācis laiks sākt ar apmācību, mēs redzēsim piemēru ar katru moduli.

1. Maršala modulis


Pirms darba sākšanas jums jāzina, ka šis modulis nenodrošina saderību starp dažādām Python kompilatora versijām.

1. piemērs
Apskatīsim pirmo, ļoti vienkāršo piemēru:

 importēt maršāla datus = [1, 2, 3, 4] objectBytes = marshal.dumps (dati) print ("Serialized:", objectBytes) objectLoad = marshal.loads (objectBytes) print ("Deserialized:", objectLoad)
Kā pirmais solis mēs importējam maršalu bibliotēku, esam izveidojuši sarakstu, kuru plānojam sērijveidot, pēc tam to krāsojam un deserializējam. Funkcija izgāztuves rūpējas par serializāciju un funkciju slodzes deserializēt (abi saņem objektu, ar kuru bloķēt). Ļoti viegli, kā jūs redzējāt. Šeit ir tās izpildes ekrānuzņēmums:

Un šeit mēs noslēdzam ar pirmo piemēru.

2. piemērs
Šajā piemērā mēs rakstīsim objektu failā.

 importēt maršāla datus = [1, 2, 3, 4] fileOut = open ("file.dat", "bw") marshal.dump (dati, fileOut) fileOut.close () fileIn = open ("file.dat", "br") dataLoad = marshal.load (fileIn) print ("Deserialized:", dataLoad) fileIn.close () 
Imports un saraksts tiek saglabāti, tikai tagad mēs izmantosim failus, mēs atveram failu rakstīšanai, b ir par baitiem, un mēs izmetam sarakstu (tagad funkcija ir izgāztuve un saņem rakstāmos datus un failu), kad esam pabeiguši, mēs to aizveram. Lai pabeigtu, mēs atveram to pašu failu lasīšanas režīmā un lasām no tā (ņemiet vērā, ka funkcija ir slodze, un tas saņem failu kā parametru), lai pabeigtu, mēs aizveram failu.

Ja paskatāmies uz failu file.dat, mēs redzēsim sekojošo:

Tīklošana nav daudz grūtāka, atcerieties tikai nelielo saderības ierobežojumu starp Python versijām. Pāriesim pie otra moduļa.

2. Cpickle modulis


Šis modulis ir rakstīts C valodā, ir vēl viens, ko sauc par marinētu gurķi, kas ir izstrādāts Python, taču tas ir lēnāks, tāpēc ieteicams izmantot cpickle. Atšķirībā no maršala šis modulis garantēs saderību starp Python versijām, tāpēc pirms programmēšanas mums šīs lietas ir jāņem vērā.

PiezīmeProgrammā Python 3 cPickle tika pārdēvēts par _pickle, un marinēšanas modulis to automātiski izmanto.

Šim modulim mēs redzēsim piemēru, kurā mēs izmantojam ligzdas, mēs redzēsim servera kodu, tas ir tikai par to, kā mēs veiktu sērijveida vai deserializāciju, tāpēc tas neietver kļūdu apstrādi un tiek izmantota viena ziņa.

 importēt ligzdu importēt marinētu gurķi s = socket.socket () s.bind (("localhost", 2016)) s.listen (1) conn, addr = s.accept () data = conn.recv (1024) print ("Dati saņemts: ", dati) print (" Deserializēts: ", marinēts.ielādē (dati)) s.close ()
Mēs redzam, ka viss darbojas kā ar parastajām ligzdām, tikai saņemtie dati ieradīsies sērijveidā, tāpēc mēs tos deserializējam ar funkciju slodzes, kā redzat, to sauc tāpat kā maršala modulī. Visbeidzot, mēs redzēsim klientu:
 importēt ligzdu importēt marinētu gurķi s = socket.socket () data = [1, 2, 3, 4] objectBytes = pickle.dumps (dati) s.connect (("localhost", 2016)) s.send (objectBytes) s. aizvērt ()
Tam nav būtisku sarežģījumu, mēs sērijveidojam objektu ar izgāztuves un mēs to nosūtām uz izveidoto kontaktligzdu. Zemāk es atstāju servera izvadi, kad klients izveido savienojumu, klienta izeja tiek ignorēta, jo tā neko nerāda.

Līdz šim nāk apmācība par datu sērijveidošanu un deserializēšanu Python, jo mēs zinām, ka šī valoda mums padara lietas daudz vieglākas.

PiezīmeApmācība izmanto versiju Python 3.5.

Vai jums patika šī apmācība un palīdzējāt tai?Jūs varat apbalvot autoru, nospiežot šo pogu, lai sniegtu viņam pozitīvu punktu

Jums palīdzēs attīstību vietā, daloties lapu ar draugiem

wave wave wave wave wave