什麼是序列化
在咱們存儲數據或者網絡傳輸數據的時候. 須要對咱們的對象進行處理. 把對象處理成
方便存儲和傳輸的數據格式. 這個過程叫序列化. 不一樣的序列化, 結果也不一樣. 可是目的是一
樣的. 都是爲了存儲和傳輸.python
在python中存在三種序列化的⽅案.
1. pickle. 能夠將咱們python中的任意數據類型轉化成bytes並寫入到文件中. 一樣也能夠把文件中好的bytes轉換成咱們python的數據,這個過程叫作反序列化redis
# dumps ,loads是對字符串進行 dunmp, load 是對文件進行操做windows
import pickle 緩存
class cat:網絡
def __init__(self,name,age):spa
self.name = name對象
self.age = age ip
def display(self):rem
print("%s抓老鼠" % self.name)字符串
c = cat("tom",18)
bs = pickle.dumps(c) #此時bs的結果是一推二進制的代碼
cc = pickle.loads(bs) #把序列化的結果轉換成對象,同樣能夠進行調用
利用 pickle還能夠對文件進行操做,不過要注意寫入的格式以及讀出來的方式
lst = [Cat("jerry", 19), Cat("tommy", 20), Cat("alpha", 21)] #將須要寫入文件的內容裝進列表中
f = open("cat", mode="wb") #用wb的模式把他們寫入文件中
pickle.dump(lst, f) # 將列表所有寫入文件中
f = open("cat", mode="rb")
ll = pickle.load(f)
for el in ll:
el.catchMouse()
2.模塊shelve
shelve提供python的持久化操做. 什麼叫持久化操做呢?說白話就是把數據寫到硬盤上.
在操做shelve的時候很是的像操做一個字典. 這個東西到後期. 就像redis差很少.
import shelve #給字典賦予了一個新的key以及Values
shelf = shelve.open("sylar")
# shelf["jay"] = "周杰倫"
print(shelf['jay'])
shelf.close()
若是嘗試直接改字典裏面字典的Values只是在緩存中進行修改了,而文件中並不會進行改變
舉例: #在打開的時候,後面加上 writeback = True
s = shelve.open("sylar", writeback=True)
s['jay']['name'] = "胡辣湯" # 嘗試改變字典中的數據
s.close()
s = shelve.open("sylar")
print(s['jay']) # 改變了.
s.close()
3, configparser模塊
該模塊適用於配置文件的格式與windows ini文件相似,能夠包含一個或多個節(section)每一個節
能夠有多個參數(鍵=值).
用configparser 模塊處理文件
config = configparser.ConfigParser()
config.read("db.ini") # 讀取⽂件
print(config.sections()) # 獲取到section. 章節...DEFAULT是給每一個章節都配備的信息
print(config.get("DEFAULT", "SESSION-TIME-OUT")) # 從xxx章節中讀xxx信息,也能夠像字典同樣操做
for k in config['168-DB']:
print(k)
for k, v in config["168-DB"].items():
print(k, v)
增刪改操做
# 先讀取. 而後修改. 最後寫回⽂件
config = configparser.ConfigParser()
config.read("db.ini") # 讀取⽂件
# 添加一個章節
# config.add_section("189-DB")
# config["189-DB"] = {
# "db_ip": "167.76.22.189",
# "port": "3306",
# "u_name":"root"}
修改信息
config.set("168-DB", "db_ip", "10.10.10.168")
# 刪除章節config.remove_section("173-DB")# 刪除元素信息config.remove_option("168-DB", "u_name")# 寫回文件config.write(open("db.ini", mode="w"))