主要内容:

  • 什么是序列化
  • pickle
  • shelve
  • json
  • configparser(模块)

一 序列化

我们在存储数据或者网络传输数据的时候,需要对我们的对象进行处理,把对象处理成方便存储和

传输的数据格式,这个就叫序列化   python中序列化有三种方案:

     1 pickle 

   2 sheelve

   3 json :  

二 pickle  ( 可以将我们python中的任意数据类型转化成bytes并写入到⽂文件中.  同样也 可以把⽂文件中写好的bytes转换回我们python的数据. 这个过程被称为反序列列化 )

 这需要记住这四个东西:

          dumps 序列化。 把对象转化成bytes

          loads 反序列化。 把bytes转化成对

     dump 序列化。 把对象转化成bytes并写入文件

   load 反序列化。把文件中的bytes读取。转化成对象
  序列化 :
import pickle
class Cat:
    def __init__(self,name,age):
        self.name=name
        self.age=age
    def catchMouse(self):
        print(self.name,self.age,"吃饭")
c=Cat("阿萨德",'10')
# c.catchMouse()

# # dumps 把对象转化成bytes  序列化
ab=pickle.dumps(c)  # 序列化一个对象
print(ab)  # 看不懂的二进制

# 把bytes 转换回对象  反序列化
a=pickle.loads(ab)  #把二进制反序列列化成我们的对
a.catchMouse()   # 猫依然是猫. 依然可以吃饭       阿萨德 10 吃饭

 怎么写入文件:

 

dump 序列化。 把对象转化成bytes并写入文件
#  load 反序列化。把文件中的bytes读取。转化成对象


还用的上边那个对象
# c
=Cat("阿萨德",'10') # f = open("pickle-text", mode="wb") # 写入文件 # pickle.dump(c,f) # 看不懂的 # f = open("pickle-text", mode="rb") # 读取 文件 # a=pickle.load(f) #反序列化 # a.catchMouse() # 看得懂的 支持多个对象写出: lst = [Cat("猫1", 10), Cat("猫2", 9), Cat("猫3", 9), Cat("猫4", 9), Cat("猫5",9)] # f = open("pickle-text", mode="wb") # # a= pickle.dump(lst,f) # 这么写文件里乱 # for el in lst: # pickle.dump(el, f) # 这么写清楚 # f.flush() # f.close() f = open("pickle-text", mode="rb") while 1: try: c = pickle.load(f) c.catchMouse() # 结果为 猫1", 10 吃饭 至猫5
except EOFError: break

    但是这样写并不够好. 因为读的时候. 并不能知道有多少对象要读. 这⾥里里记住, 不能⼀一⾏行行行行的读.  那真的要写入或者读取多个内容怎么办? 很简单. 装list⾥里里. 然后读取和写入都⽤用 list 

# lst = [Cat("jerry", 19), Cat("tommy", 20), Cat("alpha", 21)]
#
# # f=open("pickle-text",mode="wb")
# # pickle.dump(lst,f)
#
# f=open("pickle-text",mode="rb")
# l1=pickle.load(f)
# for el in l1:
#     el.catchMouse()  # 结果 为 jerry 19 吃饭   
                 tommy 20 吃饭
                    alpha 21 吃饭

三  shelve   (简单另类的一种序列化的方案. 有点儿类似后面我们学到的redis. 可以作为 一种小型的数据库来使⽤) 就是把数据写到硬盘上,在操作shelve的时候就像操作一个字典.

import shelve

shelf=shelve.open("asd")
shelf["jad"]="Lisa"
print(shelf['jad'])
shelf.close()

s = shelve.open("asd")
s["jay"] = {"name":"周杰伦", "age":18, "hobby":"哄小孩"}
print(s['jay'])
s.close()

s = shelve.open("asd", writeback=True)  # 这个鬼东西可以帮我们动态改变信息并写到文件中
#                                           这个鬼东西换可以帮我们删除数据 就像字典一样
s['jay']['name'] = "胡辣汤"    # 尝试改变字典中的数据
s.close()
s = shelve.open("asd")
print(s['jay']) #  改变了
s.close()


s = shelve.open("asd")
# for k in s: # 像字典一样遍历
  # print(k)
# print(s.keys()) # 拿到所有key的集合
for k in s.keys():
  print(k)
for k, v in s.items():  # 像字典⼀样操作
    print(k, v)
s.close()

        综上shelve就当成字典来用就⾏

 

四  json( 将python中常见的字典, 列表转化成字符串. 是目前后端数据交互使用频率 最高的一种数据格式.)全称 javascript object notatio

# dic={"a":'女王','b':';萝莉','c':'小清新'}
# s=json.dumps(dic,ensure_ascii=False) # 把 字典转化成json字符串
# print(s,type(s))

# ensure_ascii=False 这个鬼东西可以处理中文
#
# s = '{"a": "女王", "b": "萝莉", "c": "小清新"}'
# dic=json.loads(s)  # \把前端传递过来的json字符串转化成字典
# print(dic,type(dic))




# json也可以像pickle一样吧序列化的结果写到文件中
# dic = {"a": "女王", "b": "萝莉", "c": "小清新"}
# f=open('text.json',mode='w',encoding="utf-8")  #  把对象打散成json写到文件中
# json.dump(dic,f,ensure_ascii=False)
# f.close()

#读取 文件中的json
# f=open('text.json',mode='r',encoding="utf-8")
# dic=json.load(f)  #  读取json里的对象
# f.close()
# print(dic)

 我们可以向同⼀个文件中写入多个json串

写入的时候
# 1. 循环
# 2. 用dumps把字典转化成字符串, 然后手工在后面加一个\n
# 3. 写出
# f = open("new_menu.json", mode="w", encoding="utf-8")
# lst = [{"a": "胡辣汤"},{"b":"吱吱冒油的大猪蹄子"},{"c": "盖浇饭"},{"d":"马拉"},{"e":"法国大蜗牛"}]
# for el in lst:
#     s = json.dumps(el, ensure_ascii=False) + "\n"
#     f.write(s)
#
# f.flush()
# f.close()


# 读取的时候
# 1. for line in f:
# 2. strip()去掉空白
# 3. loads()变成字典

# f = open("new_menu.json", mode="r", encoding="utf-8")
# for line in f:
#     line = line.strip()
#     dic = json.loads(line)
#     print(dic)

五 configparser 

ConfigParser模块在python中是用来读取配置文件,配置文件的格式跟windows下的ini配置文件相似,可以包含一个或多个节(section),每个节可以有多个参数(键=值)。使用的配置文件的好处就是不用再程序中硬编码,可以是你的程序变得灵活起来。
注意:在python 3 中ConfigParser模块名已更名为configparser

 

函数  

读取配置文件:

  • read(filename) 直接读取ini文件内容
  • sections() 得到所有的section,并以列表的形式返回
  • options(section) 得到该section的所有option
  • items(section) 得到该section的所有键值对
  • get(section,option) 得到section中option的值,返回为string类型
  • getint(section,option) 得到section中option的值,返回为int类型
  • getfloat(section,option)得到section中option的值,返回为float类型
  • getboolean(section, option)得到section中option的值,返回为boolean类型

 

 

写入配置文件

  • add_section(section) 添加一个新的section
  • has_section(section) 判断是否有section
  • set( section, option, value) 对section中的option进行设置
  • remove_setion(section)删除一个section
  • remove_option(section, option)删除section中的option
  • write(fileobject)将内容写入配置文件。

 

posted on 2018-10-09 21:55  隐&  阅读(174)  评论(0编辑  收藏  举报