当前位置: 首页 > 图灵资讯 > 行业资讯> Python之json模块和pickle模块详解

Python之json模块和pickle模块详解

发布时间:2025-10-26 16:07:39

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

三、使用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方法将字典等数据类型序列化到一个文件中,等待其他程序调用。

importjson
dic1={"k1":"v1","k2":"v2"}
withopen("f1","w")asf:
json.dump(dic1,f)

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

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

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

importjson
withopen("f1")asf:
res=json.load(f)
print(res)
print(type(res))

打印反序列化数据及其类型的结果如下:

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

相关推荐:Python视频教程

pickle模块的用法

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

>>>importpickle
>>>dir(pickle)
['ADDITEMS','APPEND','APPENDS','BINBYTES','BINBYTES8','BINFLOAT','BINGET','BININT','BININT1','BININT2',
'BINPERSID','BINPUT','BINSTRING','BINUNICODE','BINICODE8;,'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序列操作数据

importpickle
1=[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(Kx01K\x02K\x03K\x04K.'
b'\x80\x03(Kx01K\x02K\x03K\x04K\x005tq.'
b'\x80\x03}q\x00(Xx002\x000\x0000\x000000\x0000\x0000\x0000\x00000\x00000\x0000\x00000k2q\x0000xx002\x00000\x000
x000\x00v2\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0\x00\x0\x0\x00\.'

可见一堆二进制乱码

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

importpickle
l1=[1,2,3,4]
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'>
(一、二、三、四、五)<class'tuple'>
{'k1':'v1','k2':'v2','k3':'v3'}<class'dict'>

可以看到序列化前的数据类型,反序列化后的数据类型保持不变。

6.可以使用pickle.dumps将列表、元组或字典序列化为文件,以实现永久保存。

将列表l1序列化为文件f1:

importpickle
l1=[1,2,3,4]
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中保存的数据

importpickle
withopen("f1","rb")asf:
res=pickle.load(f)
print(res)

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

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

同样的方法也可以将元组或字典序列化为文件,以实现永久保存。

相关文章

Python之json模块和pickle模块详解

Python之json模块和pickle模块详解

2025-10-26
python线程中的semaphore信号量是什么

python线程中的semaphore信号量是什么

2025-10-26
Python reversed函数及用法

Python reversed函数及用法

2025-10-26
Python截取字符串(字符串切片)方法详解

Python截取字符串(字符串切片)方法详解

2025-10-26
Python3 迭代器与生成器

Python3 迭代器与生成器

2025-10-24
Python整数常用的方法汇总

Python整数常用的方法汇总

2025-10-24