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)

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

 

      

      

 

posted @ 2018-10-17 19:48  小菜鸟张阳阳  阅读(150)  评论(0编辑  收藏  举报