zoukankan      html  css  js  c++  java
  • python3_json&pickle

    # 用eval内置方法可以将一个字符串转成python
    # 对象,但是eval是有局限性的,
    # 对于普通数据类型,json.load和eval都能用,
    # 但是遇到特殊类型时,eval就不管用了,
    # 所以以eval的重点还是通常用来执行一个字符串表达式,
    # 并返回表达式的值。
    # import json
    # x = "[null,true,false,1]"
    # # print(eval(x))
    # print(json.loads(x))
    '''
    什么是序列化?
    我们把对象(变量)从内存中变成可存储或传输的过程称之为序列化,
    在Python中叫pickling,在其他语言中也被称之为
    serialization,marshalling,flattening等等,都是一个意思。
    序列化之后,就可以把序列化后的内容写入磁盘,或者通过网络传输到别的机器上。
    反过来,把变量内容从序列化的对象重新读到内存里称之为反序列化,即unpickling。
    '''
    #------------------------------------------------------
    # import json
    # dic = {'name':'alvin', 'age':23, 'sex':'male'}
    # print(type(dic))
    # <class 'dict'>

    # j = json.dumps(dic)
    # print(type(j))
    # <class 'str'>

    # f = open('序列化对象', 'w')
    # f.write(j) #--------------等价于json.dumps(dic, f)
    # f.close()

    # ------------------------------------
    # 反序列化
    # import json
    # f = open('序列化对象')
    # data = json.loads(f.read())
    # 等价于data=json.load(f)

    #---------------------------------------
    # 注意
    # import json
    # doc = "{'l':lll}" # json 不认单引号
    # doc = str({"1":111}) # 报错,因为生成的数据还是单引号:{'one':1}
    # doc = '{"1":"111"}'
    # print(json.loads(doc))
    #-----------------------------------------------------
    # conclusion:
    # 无论数据是怎样创建的,只要满足json格式
    # 就可以json.loads出来,不一定非要dumps的数据才能loads

    # pickle
    ##=---------------序列化
    # import pickle
    # dic = {'name':'jocket22333', 'age':26, 'sex':'male'}
    # print(type(dic)) #<class 'dict'>
    #
    # j = pickle.dumps(dic)
    # print(type(j)) #<class 'bytes'>
    #
    # f = open('序列化对象pickle', 'wb')
    # #注意w是写入str, wb是写入bytes,j是bytes
    # f.write(j) #---------等价于pickle.dump(dic, f)
    #
    # f.close()


    #------------------------------反序列化
    import pickle
    f = open("序列化对象pickle", 'rb')
    data = pickle.loads(f.read())
    # 等价于data = pickle.loads(f)
    print(data['age'])

    # pickle 的问题和其他编程语言特有的序列化
    # 问题一样,就是它只能用于python
    # 并且不同版本的python彼此都不兼容
    # 因此只能用pickle用于保存那些
    # 不重要的数据,不能成功反序列化也没关系
    #====================================================
    #------------------------------------------------
    # shelve模块比pickle模块简单,只有一个open函数
    # 返回类似字典对象,可读可写
    # key必须为字符串,而值可以是python所支持的数据类型
    import shelve
    f = shelve.open(r'shelve.txt')
    f['stu1_info'] = {'name':'jocket2333', 'age':'15'}
    f['stu2_info'] = {'name':'alex','age':'20'}
    f['school_info'] = {'website':'oldboyedu.com', 'city':'beijing'}

    # f.close()
    print(f.get('stu1_info')['age'])
     
  • 相关阅读:
    资源链接 标签: 笔记 2016-08-15 13:51 66人阅读 评论(0) 收藏
    js函数 标签: javascript 2016-08-12 16:48 56人阅读 评论(0) 收藏
    js数组 标签: javascript 2016-08-03 14:15 131人阅读 评论(0) 收藏
    typeof操作符和instanceof操作符的区别 标签: JavaScript 2016-08-01 14:21 113人阅读 评论(
    js笔记 标签: javascript 2016-08-01 13:30 75人阅读 评论(0) 收藏
    Linux命令 标签: linux 2016-08-01 10:26 508人阅读 评论(0) 收藏
    linux 用户切换 标签: linux 2016-07-30 13:57 144人阅读 评论(0) 收藏
    高质量C++C编程指南笔记 标签: c++笔记 2015-11-22 20:59 179人阅读 评论(0) 收藏
    CSS学习笔记
    C++ Primer Plus(6th Edition) 习题总结(2)
  • 原文地址:https://www.cnblogs.com/qianjunye/p/10357677.html
Copyright © 2011-2022 走看看