摘要:將字符串成對(duì)象錯(cuò)誤,必須用雙引號(hào)輸出二可以序列化任意的數(shù)據(jù)類型,包括集合和類的對(duì)象實(shí)例輸出結(jié)果注意將的數(shù)據(jù)寫到文件的時(shí)候,文件必須使用的模式打開(kāi)后的模式寫入
什么叫序列化?
將原本的字典、列表或者類的實(shí)例對(duì)象等內(nèi)容轉(zhuǎn)換成一個(gè)字符串的過(guò)程就叫做序列化。
為什么要序列化?1、以某種存儲(chǔ)形式使對(duì)象(例如dict,object)持久化,例如存儲(chǔ)到數(shù)據(jù)庫(kù)中
2、將對(duì)象從一個(gè)地方(網(wǎng)絡(luò))傳遞到另一個(gè)地方
用于序列化的兩個(gè)模塊:
json,用于字符串 和 python數(shù)據(jù)類型間進(jìn)行轉(zhuǎn)換
pickle,用于python特有的類型 和 python的數(shù)據(jù)類型間進(jìn)行轉(zhuǎn)換
首先明確一點(diǎn):json本質(zhì)上就是字符串
python對(duì)象->json使用json.dumps(python對(duì)象)
json->python對(duì)象使用json.loads(json字符串)
json字符串中的值必須用雙引號(hào),見(jiàn)下例
在python中。只有基本的數(shù)據(jù)類型才能轉(zhuǎn)換成json格式的字符串,也即:int,float,str,list,tuple,dict
小技巧:如何記憶dumps和loads呢?我們mysql,redis經(jīng)常使用到dumps來(lái)持久化,也就是將mysql里的數(shù)據(jù)以字符串或二進(jìn)制的形式存儲(chǔ)到硬盤,所以對(duì)應(yīng)到j(luò)son中的dumps,將抽象的數(shù)據(jù)內(nèi)容(python對(duì)象)轉(zhuǎn)成字符串。將python對(duì)象dumps成json字符串
import json pesron = [{"user":"zs","age":10}, {"user": "ls", "age":20}] x = 10 y = {"user":"zs","age":10} json_str1 = json.dumps(pesron) json_str2 = json.dumps(x) json_str3 = json.dumps(y) print(type(json_str1),type(x),type(y)) print(json_str1,json_str2,json_str3)
輸出
[{"user": "zs", "age": 10}, {"user": "ls", "age": 20}] 10 {"user": "zs", "age": 10}
如果我們要想把序列化的內(nèi)容寫到文件中,可以直接使用json.dump
import json dic = {1:"a",2:"b"} f = open("myfile","w",encoding="utf-8") json.dump(dic,f) f.close()
使用json.dumps和json.dump的時(shí)候,只能存放ascii的字符,因此會(huì)將中文進(jìn)行轉(zhuǎn)義,這時(shí)候我們可以做使用ensure_ascii=False關(guān)閉這個(gè)特性。
將json字符串loads成python對(duì)象import json #json_str = "[{"user":"zs","age":10},{"user": "ls", "age":20}]" 錯(cuò)誤,必須用雙引號(hào) json_str1 = """[{"user":"zs","age":10},{"user": "ls", "age":20}]""" json_str2 = """{"user":"zs","age":10}""" json_str3 = """12""" person = json.loads(json_str1) x = json.loads(json_str2) y = json.loads(json_str3) print(type(person),type(x),type(y)) print(person,x,y)
輸出
二.pickle[{"user": "zs", "age": 10}, {"user": "ls", "age": 20}] {"user": "zs", "age": 10} 12
pickle可以序列化任意的數(shù)據(jù)類型,包括集合和類的對(duì)象實(shí)例
import pickle class ABC: a = 10 def __init__(self,m,n): self.m = m self.n = n abc = ABC(1,2) res = pickle.dumps(abc) back_res = pickle.loads(res) print(res) print(back_res) print(back_res.a)
輸出結(jié)果
b"x80x03c__main__ ABC qx00)x81qx01}qx02(Xx01x00x00x00mqx03Kx01Xx01x00x00x00nqx04Kx02ub." <__main__.ABC object at 0x10999fba8> 10
注意:將pickle.dumps的數(shù)據(jù)寫到文件的時(shí)候,文件必須使用rb的模式打開(kāi)后wb的模式寫入
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/42368.html
摘要:默認(rèn)情況下,它也是不安全的,如果數(shù)據(jù)是由黑客精心設(shè)計(jì)的,則反序列化的數(shù)據(jù)可能被植入惡意代碼。總結(jié)為我們提供了數(shù)據(jù)序列化的工具。如果是自己內(nèi)部使用,可以作為一個(gè)選擇進(jìn)行復(fù)雜對(duì)象的序列化。 上一節(jié)我們學(xué)習(xí)了文件的讀寫,把一個(gè)字符串(或字節(jié)對(duì)象)保存到磁盤是一件很容易的事情。但是在實(shí)際編程中,我們經(jīng)常需要保存結(jié)構(gòu)化數(shù)據(jù),比如復(fù)雜的字典、嵌套的列表等等,這時(shí)候就需要我們想辦法把這些結(jié)構(gòu)化數(shù)據(jù)先...
小編寫這篇文章的一個(gè)主要目的,主要是給大家講解關(guān)于Python的一些技能,主要是會(huì)涉及到相關(guān)的一些數(shù)據(jù)問(wèn)題,那么,怎么樣才能夠?qū)崿F(xiàn)序列化的一些操作呢?下面小編就給大家詳細(xì)的去做一個(gè)解答?! ≡谌粘i_(kāi)發(fā)中,對(duì)數(shù)據(jù)進(jìn)行序列化和反序列化是常見(jiàn)的數(shù)據(jù)操作,Python提供了兩個(gè)模塊方便開(kāi)發(fā)者實(shí)現(xiàn)數(shù)據(jù)的序列化操作,即json模塊和pickle模塊。這兩個(gè)模塊主要區(qū)別如下: json是一個(gè)文本序列化格式...
摘要:可能沒(méi)有用戶輸出的消息創(chuàng)建一個(gè),用于寫入日志文件再創(chuàng)建一個(gè),用于輸出到控制臺(tái)對(duì)象可以添加多個(gè)和對(duì)象序列化模塊什么叫序列化將原本的字典列表等內(nèi)容轉(zhuǎn)換成一個(gè)字符串的過(guò)程就叫做序列化。 hashlib模塊 1.Python的hashlib提供了常見(jiàn)的摘要算法,如MD5,SHA1等等。什么是摘要算法呢?摘要算法又稱哈希算法、散列算法。它通過(guò)一個(gè)函數(shù),把任意長(zhǎng)度的數(shù)據(jù)轉(zhuǎn)換為一個(gè)長(zhǎng)度固定的數(shù)據(jù)串(...
摘要:默認(rèn)為或者說(shuō),是以格式保存對(duì)象如果設(shè)置為或者,則以壓縮的二進(jìn)制格式保存對(duì)象。但是,要小心坑試圖增加一個(gè)坑就在這里當(dāng)試圖修改一個(gè)已有鍵的值時(shí)沒(méi)有報(bào)錯(cuò),但是并沒(méi)有修改成功。要填平這個(gè)坑,需要這樣做多一個(gè)參數(shù)沒(méi)有坑了還用循環(huán)一下 pickle pickle是標(biāo)準(zhǔn)庫(kù)中的一個(gè)模塊,在Python 2中還有一個(gè)cpickle,兩者的區(qū)別就是后者更快。所以,下面操作中,不管是用import pick...
摘要:使用來(lái)創(chuàng)建一個(gè)表示該對(duì)象值的字符串。數(shù)據(jù)被序列化以后,你可以將它們寫入文件套接字管道等等中。如果你使用管道或者套接字,在通過(guò)連至另一端的連接傾倒所有對(duì)象推送數(shù)據(jù)之后,別忘了沖洗。 目的:Python對(duì)象序列化 可用性:pickle至少1.4版本,cPickle 1.5版本以上 pickle模塊實(shí)現(xiàn)了一種算法,將任意一個(gè)Python對(duì)象轉(zhuǎn)化成一系列字節(jié)(byets)。此過(guò)程也調(diào)用了s...
閱讀 1775·2021-11-24 09:39
閱讀 1574·2021-11-16 11:54
閱讀 3512·2021-11-11 16:55
閱讀 1689·2021-10-14 09:43
閱讀 1459·2019-08-30 15:55
閱讀 1248·2019-08-30 15:54
閱讀 3437·2019-08-30 15:53
閱讀 1355·2019-08-30 14:18