Python中怎么使用json模块和pickle模块
这期内容当中小编将会给大家带来有关Python中怎么使用json模块和pickle模块,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。
json模块和pickle模块的用法
在python中,可以使用pickle和json两个模块对数据进行序列化操作。
其中:
json可以用于字符串或者字典等与python数据类型之间的序列化与反序列化操作。
pickle可以用于python特有类型与python数据类型之间的序列化与反序列化操作。
json模块的用法
1. 查看json模块内的方法:
>>>importjson>>>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方法把字典等数据类型序列化进入一个文件中,等待别的程序进行调用。
importjsondic1={"k1":"v1","k2":"v2"}withopen("f1","w")asf:json.dump(dic1,f)
运行上面的代码,可以看到在同级目录下,生成一个名为“f1”的文件,打开f1文件,其内容为:
{"k1":"v1","k2":"v2"}
6.可以使用json.load方法读取文件f1中的内容:
importjsonwithopen("f1")asf:res=json.load(f)print(res)print(type(res))
打印反序列化后的数据及其类型,得到的结果为:
{'k1':'v1','k2':'v2'}<class'dict'>
pickle模块的用法
1.查看pickle模块内的方法:
>>>importpickle>>>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对数据进行序列化操作
importpicklel1=[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进行反序列化操作
importpicklel1=[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中:
importpicklel1=[1,2,3,4,5]t1=(1,2,3,4,5)dic1={"k1":"v1","k2":"v2","k3":"v3"}withopen("f1","wb")asf:pickle.dump(l1,f)
7.可以使用pickle.load对文件f1进行反序列化,得到文件f1里保存的数据
importpicklewithopen("f1","rb")asf:res=pickle.load(f)print(res)
反序列化之后,打印数据及其类型可以看到:
[1,2,3,4,5]<class'list'>
使用同样的方法,也可以把元组,或字典序列化进一个文件中以实现永久保存。
上述就是小编为大家分享的Python中怎么使用json模块和pickle模块了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注亿速云行业资讯频道。
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。