咱們在寫入文件中的數據,只能是字符串,可是若是要想把內存的數據對象存到硬盤上去怎麼辦吶?下面就來講說序列化:json & picklepython
一、dumps序列化和loads反序列化json
dumps()序列化函數
import json #導入json模塊 info = { 'name':"seven", "age":32 } with open("test.txt","w") as f: #以普通模式寫入 data = json.dumps(info) #把內存對象轉爲字符串 f.write(data) #寫到文件中 #text.txt文件中的內容 {"name": "seven", "age": 32}
loads()反序列化spa
import json with open("test.txt","r") as f: #以普通模式讀 data = json.loads(f.read()) #用loads反序列化 print(data.get("age")) #輸出 32
二、dump序列化和load反序列化code
dump()序列化對象
import json info = { 'name':"seven", "age":32 } with open("test.txt","w") as f: #文件以寫的方式打開 json.dump(info,f) #第1個參數是內存的數據對象 ,第2個參數是文件句柄 #text.txt文件中的內容 {"name": "seven", "age": 32}
load()反序列化blog
import json with open("test.txt","r") as f: #以讀的方式打開文件 data = json.load(f) #輸入文件對象 print(data["age"]) #輸出 32
三、序列化函數內存
import json def sayhi(name): #函數 print("name:",name) info = { 'name':"seven", "age":32, "func":sayhi #引用sayhi函數名 } with open("test.txt","w") as f: json.dump(info,f) #序列化info數據對象 #輸出 File "D:\Python\Python35\lib\json\encoder.py", line 403, in _iterencode_dict yield from chunks File "D:\Python\Python35\lib\json\encoder.py", line 436, in _iterencode o = _default(o) File "D:\Python\Python35\lib\json\encoder.py", line 179, in default raise TypeError(repr(o) + " is not JSON serializable") TypeError: <function sayhi at 0x00000000006DD510> is not JSON serializable #不支持json序列化
小結:字符串
一、dumps序列化和loads反序列化get
dumps()序列化
import pickle info = { 'name':"seven", "age":32, } with open("test.txt","wb") as f: #以二進制的形式寫入 data = pickle.dumps(info) #序列化成字符串 f.write(data) #寫入test.txt 文件中 #輸出到test.txt文件中的內容 �}q (X ageqKX nameqX sevenqu.
loads()反序列化
import pickle with open("test.txt","rb") as f: #以二進制的模式讀 data = pickle.loads(f.read()) #反序列化操做 print(data.get("age")) #輸出 32
二、dump序列化和load反序列化
dump()序列化
import pickle info = { 'name':"seven", "age":32, } with open("test.txt","wb") as f: pickle.dump(info,f) #序列化 #輸出 �}q (X ageqKX nameqX sevenqu.
load()反序列化
import pickle with open("test.txt","rb") as f: data = pickle.load(f) #反序列化成內存對象 print(data.get("age")) #輸出 32
從上面的結果觀察,json和pickle好像也沒什麼區別?可是別忘了,咱們說,json只能序列化簡單的數據類型,而pickle能夠序列化python中全部的數據類型,包括函數、類等,下面咱們就來看看,如何序列化函數的。還有就是,pickle序列化的是字節,而json序列化的是字符,這個要注意一下。
三、序列化函數
①序列化
import pickle def sayhi(name): #函數 print("hello:",name) info = { 'name':"seven", "age":32, "func":sayhi #"func"對應的值sayhi,是函數名 } with open("test.txt","wb") as f: data = pickle.dumps(info) f.write(data) #輸出test.txt �}q (X funcqc__main__ sayhi qX ageqKX nameqX seven.
②反序列化
import pickle def sayhi(name): #在反序列化中必須寫上此函數,否則會報錯,由於在加載的時候,函數沒有加載到內存 print("hello:",name) with open("test.txt","rb") as f: data = pickle.loads(f.read()) print(data.get("age")) data.get("func")("seven") #執行函數sayhi #輸出 32 hello: seven #輸出的函數體中的邏輯也是能夠變的,這邊我就不作演示了
小結: