python序列化與數(shù)據(jù)持久化實(shí)例詳解
本文實(shí)例講述了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:
介紹:
- 用于實(shí)現(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è)計(jì)有所幫助。
- Python數(shù)據(jù)持久化shelve模塊用法分析
- Python中的數(shù)據(jù)對象持久化存儲模塊pickle的使用示例
- shelve 用來持久化任意的Python對象實(shí)例代碼
- 詳解python持久化文件讀寫
- 將Python中的數(shù)據(jù)存儲到系統(tǒng)本地的簡單方法
- Python通過調(diào)用mysql存儲過程實(shí)現(xiàn)更新數(shù)據(jù)功能示例
- Python3爬蟲學(xué)習(xí)之MySQL數(shù)據(jù)庫存儲爬取的信息詳解
- python將類似json的數(shù)據(jù)存儲到MySQL中的實(shí)例
- python3爬蟲學(xué)習(xí)之?dāng)?shù)據(jù)存儲txt的案例詳解
- Python編寫通訊錄通過數(shù)據(jù)庫存儲實(shí)現(xiàn)模糊查詢功能
- Python數(shù)據(jù)持久化存儲實(shí)現(xiàn)方法分析
相關(guān)文章
Python opencv醫(yī)學(xué)處理的實(shí)現(xiàn)過程
這篇文章主要介紹了Python opencv醫(yī)學(xué)處理的實(shí)現(xiàn)過程,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-05-05pandas pd.cut()與pd.qcut()的具體實(shí)現(xiàn)
本文主要介紹了pandas pd.cut()與pd.qcut()的具體實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-01-01python打開windows應(yīng)用程序的實(shí)例
今天小編就為大家分享一篇python打開windows應(yīng)用程序的實(shí)例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-06-06