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'>

  • 相关阅读:
    awk线程号
    std::string::substr函数
    计数器表的简单使用
    vim + oh-my-zsh + git搭建开发环境
    <<代码大全>>阅读笔记之二 变量名的力量
    <<代码大全>>阅读笔记之一 使用变量的一般事项
    压测工具ab的简单使用
    nginx配置文件详解
    numba初体验
    Linux查找文件内容小技巧
  • 原文地址:https://www.cnblogs.com/jenvid/p/7904253.html
Copyright © 2011-2022 走看看