序列化函數

什麼是序列化
在咱們存儲數據或者網絡傳輸數據的時候. 須要對咱們的對象進行處理. 把對象處理成
方便存儲和傳輸的數據格式. 這個過程叫序列化. 不一樣的序列化, 結果也不一樣. 可是目的是一
樣的. 都是爲了存儲和傳輸.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"))

相關文章
相關標籤/搜索