標籤:margin 取出 版本 字元 http play inf adl 選擇
資料持久化的方式有:
1.普通檔案無格式寫入:將資料直接寫入到檔案中
2.普通序列化寫入:json,pickle
3.DBM方式:shelve,dbm
相關內容:
首發時間:2018-02-23 20:52
json: 介紹:
按照指定格式【比如格式是字典,那麼檔案中就是字典】將資料明文寫入到檔案中,類型是bytes的,比如”中文“就會變成Unicode編碼
用法:
- 首先要匯入模組import json
- 序列化:
- json.dump(序列化對象,檔案對象)
- json.dumps(序列化對象),傳回值是一個字串,需要手動將這個字串寫入到檔案中
print("------json序列化--------")import jsonimport timeinfo={ ‘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()
- 還原序列化:
對於多次dump\dumps,如何load\loads取出來:
print("------json序列化--------")import jsonimport timeinfo={ ‘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 jsonwith 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 pickleinfo={ ‘name‘:‘1‘, ‘age‘:2,}f=open("test2.txt","wb")pickle.dump(info,f)#序列化方法1# f.write(pickle.dumps(info))#序列化方法2f.close()
- 還原序列化:
shelve:介紹:
- 專門用於將Python資料類型的資料持久化到磁碟,操作類似於dict
用法:
- 首先匯入模組import
- shelve開啟一個檔案: shelve檔案對象 = shelve.open(檔案名稱)
- 寫入:shelve檔案對象[key]=value
- 讀出:shelve檔案對象.get(key)
import shelve,timed = shelve.open(‘shelve_test‘) # 開啟一個檔案print("----------寫----------")info ={"name":‘lilei‘,"sex":"man"}name = ["autuman", "zhangsan", "lisi"]d["teacher"] = named["student"] = infod["date"] = time.ctime()print("--------讀------------")print(d.get("teacher"))print(d.get("student"))print(d.get("date"))d.close()
shelve可以很方便的序列化自訂的資料類型、函數:
import shelve,timeclass A: def hello(self): print("123")d = shelve.open(‘shelve_test‘) # 開啟一個檔案print("----------寫----------")d[‘class‘] =Aprint("--------讀------------")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 dbmdb=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:序列化與資料持久化