最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • Python之json模块和pickle模块详解

    正文概述    2020-02-16   329

    Python之json模块和pickle模块详解

    json模块和pickle模块的用法

    在python中,可以使用pickle和json两个模块对数据进行序列化操作。

    其中:

    json可以用于字符串或者字典等与python数据类型之间的序列化与反序列化操作。

    pickle可以用于python特有类型与python数据类型之间的序列化与反序列化操作。

    json模块的用法

    1. 查看json模块内的方法:

    >>> import json
    >>> dir(json)
    ['JSONDecodeError', 'JSONDecoder', 'JSONEncoder', '__all__', '__author__', '__builtins__', '__cached__', '__doc__', 
    '__file__', '__loader__', '__name__', '__package__', '__path__', '__spec__', '__version__', '_default_decoder', 
    '_default_encoder', 'decoder', 'dump', 'dumps', 'encoder', 'load', 'loads', 'scanner']

    2. json模块常用的功能的:dumps,dump,loads,load

    3.使用json.dumps方法可以将字典等数据格式化成一个字符串,这样可以方便别的编程语言进行调用。

    >>> dic1={"k1":"v1","k2":"v2"}
    >>> res=json.dumps(dic1)
    >>> print(res)
    {"k1": "v1", "k2": "v2"}
    >>> print(type(res))
    <class 'str'>

    格式化后的字符串看似跟原来的没什么两样,但是查看格式化后的类型就会发现是一个字符串,已经被json模块处理过了。

    4.可以使用json.loads进行反序列化

    >>> print(type(res2))
    <class 'dict'>
    >>> print(res)
    {"k1": "v1", "k2": "v2"}
    >>> print(type(res))
    <class 'str'>
    >>> res2=json.loads(res)
    >>> print(res2)
    {'k1': 'v1', 'k2': 'v2'}

    5.还可以用json.dump方法把字典等数据类型序列化进入一个文件中,等待别的程序进行调用。

    import json
    dic1={"k1":"v1","k2":"v2"}
    with open("f1","w") as f:
        json.dump(dic1,f)

    运行上面的代码,可以看到在同级目录下,生成一个名为“f1”的文件,打开f1文件,其内容为:

    {"k1": "v1", "k2": "v2"}

    6.可以使用json.load方法读取文件f1中的内容:

    import json
    with open("f1") as f:
        res=json.load(f)
        print(res)
        print(type(res))

    打印反序列化后的数据及其类型,得到的结果为:

    {'k1': 'v1', 'k2': 'v2'}
    <class 'dict'>

    相关推荐:《Python视频教程》

    pickle模块的用法

    1.查看pickle模块内的方法:

    >>> import pickle
    >>> dir(pickle)
    ['ADDITEMS', 'APPEND', 'APPENDS', 'BINBYTES', 'BINBYTES8', 'BINFLOAT', 'BINGET', 'BININT', 'BININT1', 'BININT2',
     'BINPERSID', 'BINPUT', 'BINSTRING', 'BINUNICODE', 'BINUNICODE8', 'BUILD', 'DEFAULT_PROTOCOL', 'DICT', 'DUP', 
     'EMPTY_DICT', 'EMPTY_LIST', 'EMPTY_SET', 'EMPTY_TUPLE', 'EXT1', 'EXT2', 'EXT4', 'FALSE', 'FLOAT', 'FRAME', 
     'FROZENSET', 'FunctionType', 'GET', 'GLOBAL', 'HIGHEST_PROTOCOL', 'INST', 'INT', 'LIST', 'LONG', 'LONG1', 'LONG4',
     'LONG_BINGET', 'LONG_BINPUT', 'MARK', 'MEMOIZE', 'NEWFALSE', 'NEWOBJ', 'NEWOBJ_EX', 'NEWTRUE', 'NONE', 'OBJ', 
     'PERSID', 'POP', 'POP_MARK', 'PROTO', 'PUT', 'PickleError', 'Pickler', 'PicklingError', 'PyStringMap', 'REDUCE', 
     'SETITEM', 'SETITEMS', 'SHORT_BINBYTES', 'SHORT_BINSTRING', 'SHORT_BINUNICODE', 'STACK_GLOBAL', 'STOP', 'STRING', 
     'TRUE', 'TUPLE', 'TUPLE1', 'TUPLE2', 'TUPLE3', 'UNICODE', 'Unpickler', 'UnpicklingError', '_Framer', '_Pickler', 
     '_Stop', '_Unframer', '_Unpickler', '__all__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', 
     '__name__', '__package__', '__spec__', '_compat_pickle', '_dump', '_dumps', '_extension_cache', '_extension_registry',
     '_getattribute', '_inverted_registry', '_load', '_loads', '_test', '_tuplesize2code', 'bytes_types', 'codecs',
     'compatible_formats', 'decode_long', 'dispatch_table', 'dump', 'dumps', 'encode_long', 'format_version', 'io', 
     'islice', 'load', 'loads', 'maxsize', 'pack', 're', 'sys', 'unpack', 'whichmodule']

    2.想查看某一个方法的帮助文档:

    help(pickle.modules)

    比如,我想知道pickle下的dump模块怎么用:

    help(pickle.dump)

    就可以得到pickle.dump方法的帮助文档

    3.pickle模块常用的方法有:dumps,loads,dump,load

    4.使用pickle.dumps对数据进行序列化操作

    import pickle
    l1=[1,2,3,4,5]
    t1=(1,2,3,4,5)
    dic1={"k1":"v1","k2":"v2","k3":"v3"}
    res_l1=pickle.dumps(l1)
    res_t1=pickle.dumps(t1)
    res_dic=pickle.dumps(dic1)
    print(res_l1)
    print(res_t1)
    print(res_dic)

    对数据进行序列化操作后,打印数据得到结果为:

    b'\x80\x03]q\x00(K\x01K\x02K\x03K\x04K\x05e.'
    b'\x80\x03(K\x01K\x02K\x03K\x04K\x05tq\x00.'
    b'\x80\x03}q\x00(X\x02\x00\x00\x00k1q\x01X\x02\x00\x00\x00v1q\x02X\x02\x00\x00\x00k2q\x03X\x02\x00
    \x00\x00v2q\x04X\x02\x00\x00\x00k3q\x05X\x02\x00\x00\x00v3q\x06u.'

    可以看到是一堆二进制乱码

    5.使用pickle.loads进行反序列化操作

    import pickle
    l1=[1,2,3,4,5]
    t1=(1,2,3,4,5)
    dic1={"k1":"v1","k2":"v2","k3":"v3"}
    res_l1=pickle.dumps(l1)
    res_t1=pickle.dumps(t1)
    res_dic=pickle.dumps(dic1)
    print(pickle.loads(res_l1),type(pickle.loads(res_l1)))
    print(pickle.loads(res_t1),type(pickle.loads(res_t1)))
    print(pickle.loads(res_dic),type(pickle.loads(res_dic)))

    打印序列化后的数据及其类型,得到结果为:

    [1, 2, 3, 4, 5] <class 'list'>
    (1, 2, 3, 4, 5) <class 'tuple'>
    {'k1': 'v1', 'k2': 'v2', 'k3': 'v3'} <class 'dict'>

    可以看到序列化之前是什么类型的数据,反序列化后其数据类型不变。

    6.可以用pickle.dumps把列表,元组或字典序列化进一个文件中以实现永久保存。

    把列表l1序列化进一个文件f1中:

    import pickle
    l1=[1,2,3,4,5]
    t1=(1,2,3,4,5)
    dic1={"k1":"v1","k2":"v2","k3":"v3"}
    with open("f1","wb") as f:
        pickle.dump(l1,f)

    7.可以使用pickle.load对文件f1进行反序列化,得到文件f1里保存的数据

    import pickle
    with open("f1","rb") as f:
        res=pickle.load(f)
        print(res)

    反序列化之后,打印数据及其类型可以看到:

    [1, 2, 3, 4, 5]
    <class 'list'>

    使用同样的方法,也可以把元组,或字典序列化进一个文件中以实现永久保存。


    起源地下载网 » Python之json模块和pickle模块详解

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元