zoukankan      html  css  js  c++  java
  • 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

        

     

  • 相关阅读:
    使用NBU进行oracle异机恢复
    mycat偶尔会出现JVM报错double free or corruption并崩溃退出
    exp导出数据时丢表
    service_names配置不正确,导致dg创建失败
    XML概念定义以及如何定义xml文件编写约束条件java解析xml DTD XML Schema JAXP java xml解析 dom4j 解析 xpath dom sax
    HTTP协议简介详解 HTTP协议发展 原理 请求方法 响应状态码 请求头 请求首部 java模拟浏览器客户端服务端
    java集合框架容器 java框架层级 继承图结构 集合框架的抽象类 集合框架主要实现类
    【JAVA集合框架一 】java集合框架官方介绍 Collections Framework Overview 集合框架总览 翻译 javase8 集合官方文档中文版
    java内部类深入详解 内部类的分类 特点 定义方式 使用
    再谈包访问权限 子类为何不能使用父类protected方法
  • 原文地址:https://www.cnblogs.com/konghui/p/9761280.html
Copyright © 2011-2022 走看看