zoukankan      html  css  js  c++  java
  • python3.x 基础四:json与pickple

    • 每次打开一个文件,只dump1次
    • json.dump(dump的内容,文件句柄)
    • json.load(文件句柄)
    • json可以处理列表/字典/字符串等简单数据类型,但是不能处理复杂的数据类型,如函数的内存地址
    • 不同语言间都可以用json文件
    import json
    dict1={'name':'alex','age':22,'salary':1000}
    print('dict is %s
    dumping dict to file...' % (dict1))
    fd = open('fd.txt','w',encoding='utf-8')
    # with open('fd.txt','w',encoding='utf-8') as fd:
    #     json.dump(dict1,fd)
    dict2={'name':'oldboy','age':32,'salary':2000}
    # with open('fd.txt','w',encoding='utf-8') as fd:
    #     json.dump(dict2,fd)
    json.dump(dict1,fd)
    fd.close()
    # json.dump(dict2,fd)
    fd = open('fd.txt','r',encoding='utf-8')
    print('load content from file...')
    print(json.load(fd))
    fd.close()
    output:
    dict is {'age': 22, 'salary': 1000, 'name': 'alex'}
    dumping dict to file...
    load content from file...
    {'age': 22, 'salary': 1000, 'name': 'alex'}
    dumping dict to file...
    import json
    dict1={}
    def func():
        print('in the func')
    dict1['name']=func
    fd = open('fdw.txt','w',encoding='utf-8')
    print('dumping dict to file...' % (dict1))
    json.dumps(dict1,fd)
    fd.close()
    error:
    TypeError: <function func at 0x7f0828c68488> is not JSON serializable
    • pickle能处理python所有的数据类型
    import pickle
    dict1={}
    def func():
        print('in the func')
    dict1['name']=func
    fd = open('fdw.txt','wb')
    print('dumping dict to file... %s' % (dict1))
    pickle.dump(dict1,fd)
    fd.close()
    fd = open('fdw.txt','rb')
    print(pickle.load(fd))
    fd.close()
    output:
    dumping dict to file... {'name': <function func at 0x7fa1904d4488>}
    {'name': <function func at 0x7fa1904d4488>}

    dumps(obj, *, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, cls=None, indent=None, separators=None, default=None, sort_keys=False, **kw)
    Serialize ``obj`` to a JSON formatted ``str``.

    • 将一个对象转换成json格式的字符串

    loads(s, *, encoding=None, cls=None, object_hook=None, parse_float=None, parse_int=None, parse_constant=None, object_pairs_hook=None, **kw)
    Deserialize ``s`` (a ``str``, ``bytes`` or ``bytearray`` instance
    containing a JSON document) to a Python object.

    • 将一个json格式的对象反序列成python对象
    import json
    l1 = ["alex", 123, "eric"]
    l2 = ["alex", 123, 'eric']
    s1 = """ ["alex", 123, "eric"] """
    s2 = """ ["alex", 123, 'eric'] """
    print(json.dumps(l1),type(json.dumps(l1))) # list to str
    print(json.dumps(l2),type(json.dumps(l2))) # list to str
    print(json.dumps(s1),type(json.dumps(s1))) # still str
    print(json.dumps(s2),type(json.dumps(s2))) # still str
    
    # 四个正确
    # print(json.loads(l1)) # json格式需要字符串,这是列表
    # print(json.loads(l2))  # 同上
    print(json.loads(s1),type(json.loads(s1))) # str to list,json格式需要双引号
    # print(json.loads(s2)) # 格式错误,有单引号
    
    dict1={}
    dict1["name"]="xxx"
    print(json.dumps(dict1),type(json.dumps(dict1)))
    # str1='''dict1["name"]="xxx"'''
    # print(json.loads(str))
    
    l = ['iplaypython', [1, 2, 3], {'name':'xiaoming'}]
    encoded_json = json.dumps(l)
    print(encoded_json,type(encoded_json))
    decode_json = json.loads(encoded_json)
    print(decode_json,type(decode_json))

    输出

    ["alex", 123, "eric"] <class 'str'>
    ["alex", 123, "eric"] <class 'str'>
    " ["alex", 123, "eric"] " <class 'str'>
    " ["alex", 123, 'eric'] " <class 'str'>
    ['alex', 123, 'eric'] <class 'list'>
    {"name": "xxx"} <class 'str'>
    ["iplaypython", [1, 2, 3], {"name": "xiaoming"}] <class 'str'>
    ['iplaypython', [1, 2, 3], {'name': 'xiaoming'}] <class 'list'>

  • 相关阅读:
    操作系统 chapter3 进程线程模型
    操作系统 chapter1 操作系统概述
    操作系统 chapter2 操作系统运行环境
    计算机网络 chapter 9 无线网络
    计算机网络 chapter 10 下一代因特网
    计算机网络 chapter 8 因特网上的音频/视频服务
    汇总常用的jQuery操作Table tr td方法
    jquery判断checkbox是否选中及改变checkbox状态
    $.ajax()方法详解
    wamp设置mysql默认编码
  • 原文地址:https://www.cnblogs.com/jenvid/p/7904253.html
Copyright © 2011-2022 走看看