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