zoukankan      html  css  js  c++  java
  • 模块 序列化模块: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
  • 相关阅读:
    应用运维职业现状
    两年工作总结
    explicit用法
    最小生成树 之 CODE[VS] 1231 最优布线问题
    最小生成树 之 CODE[VS] 1078 最小生成树
    并查集 之 CODE[VS] 1073 家族
    贪心 + 并查集 之 CODE[VS] 1069 关押罪犯 2010年NOIP全国联赛提高组
    枚举+并查集 之 CODE[VS] 1001 舒适的路线 2006年
    SPFA算法(求解单源最短路)详解 + 最短路 之 CODE[VS] 1079 回家
    最短路 之 CODE[VS] 1041 Car的旅行路线 2001年NOIP全国联赛提高组
  • 原文地址:https://www.cnblogs.com/yuncong/p/9580814.html
Copyright © 2011-2022 走看看