下载环球青藤APP

扫码关注领取福利

顶部

售前

售后

下载

公众号

扫描二维码

关注微信公众号

当前位置: 首页 > Python编程 > Python编程实战技能 > Python编程基础入门 > Python之json模块和pickle模块详解

Python之json模块和pickle模块详解

发布时间:2020年09月27日 10:04:12 来源: 点击量:961

【摘要】json模块和pickle模块的用法在python中,可以使用pickle和json两个模块对数据进行序列化操作。其中:json可以用于字符串或者字典等与python

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'x80x03]qx00(Kx01Kx02Kx03Kx04Kx05e.'
b'x80x03(Kx01Kx02Kx03Kx04Kx05tqx00.'
b'x80x03}qx00(Xx02x00x00x00k1qx01Xx02x00x00x00v1qx02Xx02x00x00x00k2qx03Xx02x00
x00x00v2qx04Xx02x00x00x00k3qx05Xx02x00x00x00v3qx06u.'

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

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

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

[12345] <class 'list'>
(12345) <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)

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

[12345]
<class 'list'>

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

分享到: 编辑:wangmin

就业培训申请领取
您的姓名
您的电话
意向课程
点击领取

环球青藤

官方QQ

扫描上方二维码或点击一键加群,免费领取大礼包,加群暗号:青藤。 一键加群

环球青藤移动课堂APP 直播、听课。职达未来!

安卓版

下载

iPhone版

下载
环球青藤官方微信服务平台

刷题看课 APP下载

免费直播 一键购课

代报名等人工服务

课程咨询 学员服务 公众号

扫描关注微信公众号

APP

扫描下载APP