zoukankan      html  css  js  c++  java
  • pickle模块,shelve模块,json模块,xml模块,configparser模块

      今天学习了pickle模块,shelve模块,json模块,xml模块,configparser模块。

      一、pickle模块:

        pickle是一个用来序列化的模块

        序列化是什么?

        指的是将内存中的数据结构转化为一种中间格式 并存储到硬盘上

        

        反序列化?

        将硬盘上存储的中间格式数据再还原为内存中的数据结构

        为什么要序列化?

        就是为了将数据持久存储

        之前学过的文件也能完成持久化存储 但是操作起来非常麻烦

        例子:

        import pickle

        # 用户注册后得到的数据

        name = '高跟'

        password = '123'

        height = 1.5

        hobby = ['吃','喝','赌','飘',{1,2,3}] 

        with open('userdb.txt','wt',encoding = 'utf-8') as f:

          text = '|'.join([name,password,str(height)])

          f.write(text)   这是平时使用的文件写入

        pickle支持python中所有的数据类型

        user = {'name':name,'password':password,'height':height,'hobby':hobby,'test':3}

        序列化的过程 dumps功能

        with open('userdb.pkl','ab') as f:

          userbytes = pickle.dumps(user)

          f.write(userbytes)

        反序列化过程 loads功能

        with open('userdb.pkl','rb') as f:

          userbytes = f.read()

          user = pickle.loads(userbytes)

          print(user)

          print(type(user))

        dump功能 直接序列化到文件

        with open('userdb.pkl','ab') as f:

          pickle.dump(user,f)

        load功能  从文件反序列化

        with open('userdb.pkl','rb') as f:

          user = pickle.load(f)

          print(user)

      二、shelve模块

        是什么

          一个用于序列化的模块

        为什么

          使用pickle和json都需要与文件打交道

          为了更加方便而推出的另一种序列化方式

        怎么用

          1、open

          2、以key-value方式进行存取

          3、close

        例子:

          import shelve

          user = {'name':' 高跟'}

          s = shelve.open('userdb.shv',writeback = True)

          s['user'] = user

          print(s['user'])

        总结

          可以存储python所有基础数据类型

          只需要指定文件名字即可,使用方法与字典类型相同

          其实该模块是对pickle模块的封装 使其更简单

        

      三、json模块

        pickle和shelve序列化后得到的数据 只有python才能解析

        通常企业开发不可能做一个单机程序 都需要联网进行计算机间的交互

        我们必须保证这个数据 能够跨平台使用

        JSON是什么? java script object notation 就是对象表示法

        var obj = {'name':'egon'}

        对于我们开发而言 json就是一种通用的数据格式 任何语言都能解析

        js 中的数据类型           python数据类型 的对应关系

        {}          字典

        []          list

        string ""       str

        int/float       int/float

        true/false      True/False

        null         None

        

        json格式的语法规范

        最外层通常是一个字典或列表

        {} or []

        只要你想写一个json格式的数据 那么最外层直接写{}

        字符串必须是双引号

        你可以在里面套任意多的层次

        json模块的核心功能

        dump  

        dumps

        load

        loads

        不带s  封装write 和read

        例子:

          直接解析字符串的json为python对象

        import json

        jsontext = '''{

          'users':[{

            'name':'egon',

            'age':68

    },

              {

          'name':'hu老师',

          'age',18

    }]

    }'''

        res = json.loads(jsontext)

        print(res)

        mydic = {

          'users':

    [{

            'name':'egon',

            'age':68

    },

              {

          'name':'hu老师',

          'age',18

    }]

    }

        with open('b.json','wt',encoding = 'utf-8') as f:

          json.dump(mydic,f)

      四、xml模块

        什么是xml

          是一种标记语言(计算机能识别的文本)

        xml有什么用

          制定了一种文本书写规范,使得计算机能够轻松识别这些数据 就和python一样

        为什么不直接用python语言来进行传输,计算机识别起来太费劲(语法太多,变化太复杂)

        所以需要一种更加简单的解决方案

        xml语法标准

          一、任何的起初标签都必须有一个结束标签

          二、可以采用另一种简化语法,可以在一个标签中同时表示起始和结束标签。这种语法是在大于符号之前紧跟一个斜线(/),例如<百度百科词条/>。XML解析器会将其翻译成<百度百科词条></百度百科词条>。

          三、标签必须按合适的顺序进行嵌套,所以结束标签必须按镜像顺序匹配起始标签。这好比是将起始和结束标签看作是数字中的左右括号:在没有关闭所有的内部括号之前,是不能关闭外面的括号的。

          四、所有的特性都必须有值。

          五、所有的特性都必须在值的周围加上双引号。

      总结:

        xml是一种数据格式遵循一定书写规范,用于多个平台之间的数据交换,和json的作用是一样的。

      python中的xml

      学习重点

        1、标签的组成

          <tagname attributename = "value"> text<subtags/></tagname>

        2、数据解析(拿到想要的数据)

        3、代码生成xml文档

      了解知识点

        数据的修改

      导入核心模块

        import xml.etree.ElmentTree  表示节点树

      数据解析

        Elment核心成员

          tag attrib text

        常用方法

          Elment

          getchildren() 获取所有子标签

          find    从子标签中获取名字匹配的第一个子标签

          findall     从子标签中获取名字匹配的所有子标签

          iter    从子全文中获取名字匹配的所有标签  返回迭代器

          get    获取指定属性的值

          append  增加子标签

          remove  删除子标签

          Elmenttree

          parse   文本文件转对象

          dump     对象转文本

          write       写入

          getroot    获取跟标签

        生成xml

          创建节点

          添加内容

          转为节点树

          写入文件

      五、configparser模块

        配置文件解析模块

          运行程序时一些参数需要用户来决定,这些参数称之为配置信息,配置信息通常就放在一个文件中

        为什么要配置文件?

          一些参数我们不能在代码中写死,这样扩展性太低,修改需求时必须修改源代码,太麻烦

        例子:

          import configparser

          #创建一个解析器

          config = configparser.ConfigParser()

          #读取并解析test.cfg

          config.read('test.cfg',encoding = 'utf-8')

          #获取需要的信息

          #获取所有分区

          print(config.sections())

          #获取所有选项

          print(config.options('user'))

          #获取某个选项的值

          print(config.get('path','DB_PATH'))

          #是否有某个选项

          config.has_option()

          #是否有某个分区

          config.has_section()

          #不太常用

          添加

          config.add_section('server')

          config.set('server','url','192.168.1.2')

          删除

          config.remove_option('user','age')

          修改

          config.set('server','url','192.168.1.2')

          写回文件中

          with open('test.cfg','wt',encoding = 'utf-8') as f:

            cofig.write(f)

      总结:配置文件是非常常用的程序扩展方法,其实使用起来非常简单

          

          

  • 相关阅读:
    vue3.0提前了解系列一 通过cli快速搭建一个3.0项目
    vscode卡的飞起解决办法-其中之一
    常用正则表达式整理
    jq-outerhtml不能执行新元素内部的js解决方案
    前端面试题(亲身面试经验)
    MAC上Cisco AnyConnect删除不干净,造成无法重新安装的解决办法
    vue需要知道哪些才能算作入门以及熟练
    jquery版本轮播图(es5版本,兼容高)
    webpack4常用片段
    前端速度优化
  • 原文地址:https://www.cnblogs.com/xiaocaiyang/p/9805925.html
Copyright © 2011-2022 走看看