您好,登錄后才能下訂單哦!
這篇文章主要介紹python中序列化與數據持久化的示例分析,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!
具體如下:
數據持久化的方式有:
1.普通文件無格式寫入:將數據直接寫入到文件中
2.普通序列化寫入:json,pickle
3.DBM方式:shelve,dbm
相關內容:
json
pickle
shelve
dbm
json:
介紹:
按照指定格式【比如格式是字典,那么文件中就是字典】將數據明文寫入到文件中,類型是bytes的,比如”中文“就會變成Unicode編碼
用法:
首先要導入模塊import json
序列化:
json.dump(序列化對象,文件對象)
json.dumps(序列化對象),返回值是一個字符串,需要手動將這個字符串寫入到文件中
print("------json序列化--------") import json import time info={ 'date':time.localtime(), 'name':'中文' } f=open("test.txt","w") print("---------dump---------") # json.dump(info,f) # f.close() print("---------dumps,---------") f.write(json.dumps(info)) f.close()
反序列化:
json.load(文件對象)
json.loads(字符串)
print("------反序列化--------") import json f=open("test.txt","r") print("-------load----------") # data=json.load(f)#1 # print(data) print("-------loads----------") d2=json.loads(f.read()) print(d2) f.close()
對于多次dump\dumps,如何load\loads取出來:
需要在dump的時候,手動對數據進行劃分
print("------json序列化--------") import json import time info={ 'date':time.localtime(), 'name':'中文' # 'func':hello #注:json不可序列化函數 } info2=['1',2,3,4] f=open("test.txt","w") print("---------dumps,---------")#用'\n'來區分兩份數據 f.write(json.dumps(info)+"\n") f.write(json.dumps(info2)+"\n") f.close()
import json with open("test.txt") as f: a=json.loads(f.readline()) b=json.loads(f.readline()) print(a,b)
pickle:
介紹:
用于實現Python數據類型與Python特定二進制格式之間的轉換
參數protocol規定了序列化的協議版本,默認情況下使用pikkle序列化數據是bytes的,打開文件的方式必須為二進制格式
用法:
首先導入模塊import pickle
序列化:
pickle.dump(序列化對象,文件對象)
pickle.dumps(序列化對象),返回值是一個字符串,需要手動將這個字符串寫入到文件中
import pickle info={ 'name':'1', 'age':2, } f=open("test2.txt","wb") pickle.dump(info,f)#序列化方法1 # f.write(pickle.dumps(info))#序列化方法2 f.close()
反序列化:
pickle.load(文件對象)
pickle.loads(字符串)
print("------反序列化--------") import pickle f=open("test2.txt","rb") data=pickle.loads(f.read())#反序列方法1 print(data) # data=pickle.load(f)#反序列方法2 # print(data) f.close()
shelve:
介紹:
專門用于將Python數據類型的數據持久化到磁盤,操作類似于dict
用法:
首先導入模塊import
shelve打開一個文件: shelve文件對象 = shelve.open(文件名)
寫入:shelve文件對象[key]=value
讀出:shelve文件對象.get(key)
import shelve,time d = shelve.open('shelve_test') # 打開一個文件 print("----------寫----------") info ={"name":'lilei',"sex":"man"} name = ["autuman", "zhangsan", "lisi"] d["teacher"] = name d["student"] = info d["date"] = time.ctime() print("--------讀------------") print(d.get("teacher")) print(d.get("student")) print(d.get("date")) d.close()
shelve可以很方便的序列化自定義的數據類型、函數:
import shelve,time class A: def hello(self): print("123") d = shelve.open('shelve_test') # 打開一個文件 print("----------寫----------") d['class'] =A print("--------讀------------") a=d.get('class')() a.hello() d.close()
dbm:
介紹:
dbm與shelve非常類似,但dbm的鍵和值必須是字符串類型
dbm默認寫入的數據是bytes的,將所有字符串都序列化成bytes的
用法:
首先導入模塊imort dbm【注意的是由很多個不同的dbm,可以選擇來使用,這里使用默認】
打開文件:dbm對象=dbm.open(文件名,打開模式)
寫入:dbm對象[key]=value
讀取: dbm對象[key]
import dbm db=dbm.open("test.txt","c") print("寫".center(50,'-')) db["name"]="1111111111112" db["name2"]="2222222222222" print("讀".center(50,'-')) print(db["name"]) print(db["name2"]) db.close()
以上是“python中序列化與數據持久化的示例分析”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。