温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Python中怎么使用json模块和pickle模块

发布时间:2020-08-26 16:58:24 阅读:112 作者:Leah 栏目:编程语言
Python开发者专用服务器限时活动,0元免费领,库存有限,领完即止! 点击查看>>

这期内容当中小编将会给大家带来有关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'>

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

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

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

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

上述就是小编为大家分享的Python中怎么使用json模块和pickle模块了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注亿速云行业资讯频道。

亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI

开发者交流群×