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