• python--(常用模块-2序列化)


    python--(常用模块-2序列化)

    一.序列化:

      把对象打散成bytes或者字符串。 方便存储和传输 序列化
      把bytes或者字符串转换回对象。 反序列化

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

    二.pickle(比较重要)

      把python中所有的对象都可以转化成bytes。进行存储和传输

      

     1 # import pickle
     2 # class Cat:
     3 #     def __init__(self,name,age):
     4 #         self.name = name
     5 #         self.age = age
     6 #
     7 #     def catchMouse(self):
     8 #         print(self.name,"抓老鼠")
     9 # c = Cat("jerry",18)
    10 # bs = pickle.dumps(c) #序列化一个对象
    11 # print(bs)#一堆二进制,看不懂
    12 #
    13 # cc = pickle.loads(bs) #把二进制反序列化成我们的对象
    14 # cc.catchMouse()
    15 
    16 
    17 
    18 # lst = [Cat("jerry",Cat("tommy",20),Cat("alpha",21))]
    19 #
    20 # f = open("cat",mode = "wb")
    21 # pickle.dump(lst,f)  #写入到文件中
    22 #
    23 # f = open("cat",mode = "rb")
    24 # l1 = pickle.load(f)  #从文件中读取
    25 # for i in l1:
    26 #     i.catchMouse()

    三.shelve 

      shelve提供python的持久化操作. 什么叫持久化操作呢? 说⽩话,就是把数据写到硬盘上.
      在操作shelve的时候非常的像操作⼀个字典. 这个东⻄到后期. 就像redis差不多.

     1 import shelve
     2 
     3 # 打开一个文件
     4 # f = shelve.open("大阳哥", writeback=True)
     5 # f['jj'] = "林俊杰"
     6 # f['dyg'] = "大阳哥"
     7 # f['zzr'] = "周芷若"
     8 
     9 # f = {}
    10 # 像操作字典一样操作文件
    11 # f["jay"] = "周杰伦"
    12 # print(f['jay'])
    13 
    14 # f["jay"] = {'name': "周杰伦", 'age': 38, "hobby": "吃喝拉撒睡"}
    15 
    16 # f['jay']['name'] = "胡辣汤"
    17 # print(f['jay']['name'])
    18 # print(f['jay'])
    19 
    20 
    21 # f.close()
    22 
    23 f = shelve.open("大阳哥")
    24 # print(f.keys())
    25 # for k in f.keys(): # 可以获取到所有的key
    26 #     print(k)
    27 #
    28 # for k in f:
    29 #     print(k)
    30 #
    31 # for k, v in f.items():
    32 #     print(k, v)

    四.json(重点)  

      json是我们前后端交互的枢纽. 相当于编程界的普通话. ⼤家沟通都⽤
       json. 为什么这样呢? 因为json的语法格式可以完美的表⽰出⼀个对象. 那什么是json: json全
       称javascript object notation. 翻译过来叫js对象简谱.

     1 # import json
     2 # dic = {"a":"女王","b":"萝莉","c":"小仙女"}
     3 # s = json.dumps(dic) #把字典转换成json字符串
     4 # print(s)
     5 # #{"a": "u5973u738b", "b": "u841du8389", "c": "u5c0fu4ed9u5973"}
     6 #
     7 # import json
     8 # dic = {"a":"女王","b":"萝莉","c":"小仙女"}
     9 # s = json.dumps(dic,ensure_ascii=False) #ensure_ascii=False 去asxiii码
    10 # print(type(s),s)
    11 # #<class 'str'> {"a": "女王", "b": "萝莉", "c": "小仙女"}
    12 #
    13 # import json
    14 # s =  '{"a": "⼥王", "b": "萝莉", "c": "小仙女"}'
    15 # dic = json.loads(s)
    16 # print(type(dic),dic)
    17 # #<class 'dict'> {'a': '⼥王', 'b': '萝莉', 'c': '小仙女'}
    18 
    19 
    20 # #写入文件
    21 # dic = {"a": "⼥王", "b": "萝莉", "c": "⼩清新"}
    22 # f = open("test.json", mode="w", encoding="utf-8")
    23 # json.dump(dic, f, ensure_ascii=False) # 把对象打散成json写⼊到⽂件中
    24 # f.close()
    25 #
    26 # #读取文件
    27 # f = open("test.json", mode="r", encoding="utf-8")
    28 # dic = json.load(f)
    29 # f.close()
    30 # print(dic)
    31 
    32 
    33 # 注意我们可以向同一个文件写入多个json串,但是读不行.
    34 # 写入的时候
    35 # 1. 循环
    36 # 2. 用dumps把字典转化成字符串, 然后手工在后面加一个
    
    37 # 3. 写出
    38 # f = open("new_menu.json", mode="w", encoding="utf-8")
    39 # lst = [{"a": "胡辣汤"},{"b":"吱吱冒油的大猪蹄子"},{"c": "盖浇饭"},{"d":"马拉"},{"e":"法国大蜗牛"}]
    40 # for el in lst:
    41 #     s = json.dumps(el, ensure_ascii=False) + "
    "
    42 #     f.write(s)
    43 #
    44 # f.flush()
    45 # f.close()
    46 
    47 
    48 # 读取的时候
    49 # 1. for line in f:
    50 # 2. strip()去掉空白
    51 # 3. loads()变成字典
    52 
    53 # f = open("new_menu.json", mode="r", encoding="utf-8")
    54 # for line in f:
    55 #     line = line.strip()
    56 #     dic = json.loads(line)
    57 #     print(dic)

    六.configparser

      该模块适用于配置⽂件的格式与windows ini⽂件类似,可以包含一个或多个节(section)每个节
      可以有多个参数(键=值). 首先, 我们先看一个xxx服务器的配置文件

     1 [DEFAULT] [DEFAULT]
     2 ServerAliveInterval = 45
     3 Compression = yes
     4 CompressionLevel = 9
     5 ForwardX11 = yes
     6 [[bitbucket.org bitbucket.org]]
     7 User = hg
     8 [[topsecret.server.com topsecret.server.com]]
     9 Port = 50022
    10 ForwardX11 = no

       我们用configparser就可以对这样的文件进行处理.首先,是初始化

     1 import configparser
     2 config = configparser.ConfigParser()
     3 config['DEFAULT'] ={ "sleep": 1000,
     4   "session-time-out": 30,
     5   "user-alive": 999999
     6 }
     7 config['TEST-DB'] = {
     8   "db_ip": "192.168.17.189",
     9   "port": "3306",
    10   "u_name": "root",
    11   "u_pwd": "123456"
    12 }
    13 config['168-DB'] = {
    14   "db_ip": "152.163.18.168",
    15   "port": "3306",
    16   "u_name": "root",
    17   "u_pwd": "123456"
    18 }
    19 config['173-DB'] = {
    20   "db_ip": "152.163.18.173",
    21   "port": "3306",
    22   "u_name": "root",
    23   "u_pwd": "123456"
    24 }
    25 f = open("db.ini", mode="w"
    26 config.write(f) # 写⼊⽂
    27 f.flush()
    28 f.close()
    View Code

      读取文件信息

     1 config = configparser.ConfigParser()
     2 config.read("db.ini") # 读取⽂
     3 print(config.sections()) # 获取到section. 章节...DEFAULT是给每个章节都配备的信
     4 print(config.get("DEFAULT", "SESSION-TIME-OUT")) # 从xxx章节中读取到xxx信
     5 # 也可以像字典⼀样操作
     6 print(config["TEST-DB"]['DB_IP'])
     7 print(config["173-DB"]["db_ip"])
     8 
     9 for k in config['168-DB']:
    10   print(k)
    11 for k, v in config["168-DB"].items():
    12   print(k, v)
    13 
    14 print(config.options('168-DB')) # 同for循环,找到'168-DB'下所有
    15 print(config.items('168-DB')) #找到'168-DB'下所有
    16 
    17 print(config.get('168-DB','db_ip')) # 152.163.18.168 get⽅法Section下的
    18 key对应的value
    View Code

      增删改操作:

     1 # 先读取. 然后修改. 最后写回⽂件
     2 config = configparser.ConfigParser()
     3 config.read("db.ini") # 读取⽂
     4 # 添加⼀个章节
     5 # config.add_section("189-DB")
     6 # config["189-DB"] = {
     7 # "db_ip": "167.76.22.189",
     8 # "port": "3306",
     9 # "u_name": "root",
    10 # "u_pwd": "123456"
    11 # }
    12 
    13 # 修改信息
    14 config.set("168-DB", "db_ip", "10.10.10.168")
    15 # 删除章节
    16 config.remove_section("173-DB")
    17 # 删除元素信息
    18 config.remove_option("168-DB", "u_name")
    19 # 写回⽂件
    20 config.write(open("db.ini", mode="w"
    View Code

        

     

  • 相关阅读:
    使用VS2005制作安装包时遇到的问题
    XPO学习(5)一个实现数据编辑的ASP.NET应用程序
    XPO学习(2)关系(一对多)
    XPO学习(1)第一个基于XPO的 数据感知应用程序
    XPO学习(3)数据查询
    XPO学习(4)一个WINFROM的数据编辑应用程序
    【收藏】Oracle教程
    IIS 7中的AppCmd.exe执行的基础命令
    类和结构的区别
    windows服务器管理交流群
  • 原文地址:https://www.cnblogs.com/konghui/p/9761280.html
Copyright © 2020-2023  润新知