• 模块 序列化模块:json pickle


    模块:一个模块就是一个包含了Python定义和声明的文件,文件名就是模块名字加上.py的后缀

      模块的形象:

        内置模块:安装Python解释器的时候一起安装上的

        第三方模块(扩展模块):需要自己安装

        自定义模块:自己写的py文件

    序列化模块 json 与pickle

      序列的对象:列表,元组,字符串,bytes

    序列化的定义:把一个数据类型转换成字符串,bytes类型的过程

    为什么要把数据类型序列化

      当你需要把一个数据类型存储在文件中的时候

      当你需要把一个数据类型通过网络传输的时候

      使用eval() 有风险,所以一般情况下不能使用

    json模块:将少量的数据类型转化成字符串的形式

      应用场景:

        在网络操作中,以及多语言环境中,要传递字典,数字,字符串,列表等简单的数据类型的时候使用。

      优点:对于所有语言都通用

      缺点:只支持数字,字符串,列表,字典(key值必须是可hash的,即不可变的数据类型)的数据类型

    import json
    stu = {'name':'何青松','sex':'male'}
    ret = json.dumps(stu,ensure_ascii=False)       #序列化的过程
                            #ensure_ascii=False 希望序列化的中文能以中文的形式被现实并且写到文件中
     print(ret,type(ret)) #{"name": "何青松", "sex": "male"} <class 'str'> print(stu,type(stu)) #{'name': '何青松', 'sex': 'male'} <class 'dict'> l1 = json.loads(ret) #反序列过程 print(l1,type(l1)) #{'name': '何青松', 'sex': 'male'} <class 'dict'>

      import json

      方法 dumps() 序列化   loads()反序列化 

      dumps()   dic--->str   序列化方法

      loads(str)    str----> dic/list   反序列化方法

      dump(dic/lis,f)    dic/list------->文件,序列化方法

      load(f)    文件中-----》dic/list    反序列化方法。可以进行多次dump进入文件中的数据,但是load会报错

      参数:ensure_ascii=False 希望序列化的中文能以中文的形式被显示并且写入文件中

    pickle  将数据类型转化成bytes类型

    与json方法相同,只是转化类型不同

      dump与load  操作文件的时候必须以+b打开

      在load的时间,如果这个要被load的内容不再内存中,程序会报错的

      pickle支持多次dump和多次load   (load的时候需要进行异常处理)

    import pickle
    class Course:
        def __init__(self,name,price):
            self.name = name
            self.price = price
    python = Course('python',29800)
    linux = Course('linux',25800)
    mysql = Course('mysql',18000)
    def my_dump(course):
        with open('pickle','ab') as f:
            pickle.dump(course,f)
    my_dump(python)
    my_dump(linux)
    my_dump(mysql)
    with open('pickle','rb') as f:
        while True:
            try:
                content = pickle.load(f)
                print(content.name)
            except EOFError:
                break
  • 相关阅读:
    201671010113 201620172 《JAVA程序设计》第三周
    201671010113 201620172 《JAVA程序设计》浅入JAVA
    201671010113 201620172 《JAVA程序设计》第四周
    C++中的四种类型转换符
    《统计学习方法》 梯度下降的两种应用场景
    【转载】推荐系统算法总结
    剑指offer面试题1
    SQL清空数据技巧
    DataGridView绑定List时无法进行添加删除操作的解决方法
    MyEclipse新建web project和navicat110_mysql_en工具
  • 原文地址:https://www.cnblogs.com/yuncong/p/9580814.html
Copyright © 2020-2023  润新知