python序列化與數(shù)據(jù)持久化實例詳解
本文實例講述了python序列化與數(shù)據(jù)持久化。分享給大家供大家參考,具體如下:
數(shù)據(jù)持久化的方式有:
1.普通文件無格式寫入:將數(shù)據(jù)直接寫入到文件中
2.普通序列化寫入:json,pickle
3.DBM方式:shelve,dbm
相關(guān)內(nèi)容:
- json
- pickle
- shelve
- dbm
json:
介紹:
按照指定格式【比如格式是字典,那么文件中就是字典】將數(shù)據(jù)明文寫入到文件中,類型是bytes的,比如”中文“就會變成Unicode編碼

用法:
- 首先要導(dǎo)入模塊
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的時候,手動對數(shù)據(jù)進(jìn)行劃分
print("------json序列化--------")
import json
import time
info={
'date':time.localtime(),
'name':'中文'
# 'func':hello #注:json不可序列化函數(shù)
}
info2=['1',2,3,4]
f=open("test.txt","w")
print("---------dumps,---------")#用'\n'來區(qū)分兩份數(shù)據(jù)
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:
介紹:
- 用于實現(xiàn)Python數(shù)據(jù)類型與Python特定二進(jìn)制格式之間的轉(zhuǎn)換
- 參數(shù)protocol規(guī)定了序列化的協(xié)議版本,默認(rèn)情況下使用pikkle序列化數(shù)據(jù)是bytes的,打開文件的方式必須為二進(jìn)制格式
用法:
- 首先導(dǎo)入模塊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數(shù)據(jù)類型的數(shù)據(jù)持久化到磁盤,操作類似于dict
用法:
- 首先導(dǎo)入模塊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可以很方便的序列化自定義的數(shù)據(jù)類型、函數(shù):
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默認(rèn)寫入的數(shù)據(jù)是bytes的,將所有字符串都序列化成bytes的
用法:
- 首先導(dǎo)入模塊imort dbm【注意的是由很多個不同的dbm,可以選擇來使用,這里使用默認(rèn)】
- 打開文件: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相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Python操作json技巧總結(jié)》、《Python編碼操作技巧總結(jié)》、《Python數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Python函數(shù)使用技巧總結(jié)》、《Python字符串操作技巧匯總》、《Python入門與進(jìn)階經(jīng)典教程》及《Python文件與目錄操作技巧匯總》
希望本文所述對大家Python程序設(shè)計有所幫助。
- Python數(shù)據(jù)持久化shelve模塊用法分析
- Python中的數(shù)據(jù)對象持久化存儲模塊pickle的使用示例
- shelve 用來持久化任意的Python對象實例代碼
- 詳解python持久化文件讀寫
- 將Python中的數(shù)據(jù)存儲到系統(tǒng)本地的簡單方法
- Python通過調(diào)用mysql存儲過程實現(xiàn)更新數(shù)據(jù)功能示例
- Python3爬蟲學(xué)習(xí)之MySQL數(shù)據(jù)庫存儲爬取的信息詳解
- python將類似json的數(shù)據(jù)存儲到MySQL中的實例
- python3爬蟲學(xué)習(xí)之?dāng)?shù)據(jù)存儲txt的案例詳解
- Python編寫通訊錄通過數(shù)據(jù)庫存儲實現(xiàn)模糊查詢功能
- Python數(shù)據(jù)持久化存儲實現(xiàn)方法分析
相關(guān)文章
Python opencv醫(yī)學(xué)處理的實現(xiàn)過程
這篇文章主要介紹了Python opencv醫(yī)學(xué)處理的實現(xiàn)過程,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-05-05
pandas pd.cut()與pd.qcut()的具體實現(xiàn)
本文主要介紹了pandas pd.cut()與pd.qcut()的具體實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-01-01

