序列化函数

Posted lowen107

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了序列化函数相关的知识,希望对你有一定的参考价值。

什么是序列化
在我们存储数据或者网络传输数据的时候. 需要对我们的对象进行处理. 把对象处理成
方便存储和传输的数据格式. 这个过程叫序列化. 不同的序列化, 结果也不同. 但是目的是一
样的. 都是为了存储和传输.

在python中存在三种序列化的?案.
1. pickle. 可以将我们python中的任意数据类型转化成bytes并写入到文件中. 同样也可以把文件中好的bytes转换成我们python的数据,这个过程叫做反序列化

# dumps ,loads是对字符串进行     dunmp, load 是对文件进行操作

import pickle    

class cat:

  def __init__(self,name,age):

    self.name = name

    self.age = age 

  def display(self):

    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"))

 









































以上是关于序列化函数的主要内容,如果未能解决你的问题,请参考以下文章

函数-内置函数,匿名函数,嵌套函数,高阶函数,序列化

为啥我在 XML 反序列化函数中收到此错误?

C++ 模板工厂构造函数/反序列化

反序列化没有默认构造函数的类型的 STL 容器

MYSQL存储的序列化和取消序列化函数

序列化,反序列化与空参构造函数