本文实例讲述了python3.5 json与pickle实现数据序列化与反序列化操作。分享给大家供大家参考,具体如下:
1、json:不同语言之间进行数据交互。
(1)json数据序列化:dumps()
json数据是一种轻量级的数据交换格式,序列化:将内存数据对象变成字符串。
1
2
3
4
5
6
7
8
9
10
11
12
13
|
#!/usr/bin/env python # -*- coding:utf-8 -*- # author:zhengzhengliu import json info = { "name" : "liu" , "age" : 25 , "sex" : "girl" } f = open ( "test.txt" , "w" ) print (json.dumps(info)) f.write(json.dumps(info)) f.close() |
运行结果如下图:
(2)json数据反序列化:loads()
1
2
3
4
5
6
7
|
#!/usr/bin/env python # -*- coding:utf-8 -*- # author:zhengzhengliu import json f = open ( "test.txt" , "r" ) data = json.loads(f.read()) print (data[ 'age' ]) |
运行结果 :
25
(3)json序列化——多次dumps;反序列化——不能实现多次loads
1
2
3
4
5
6
7
8
9
10
11
12
13
|
#!/usr/bin/env python # -*- coding:utf-8 -*- # author:zhengzhengliu import json info = { "name" : "liu" , "age" : 32 } f = open ( "test.txt" , "w" ) f.write(json.dumps(info)) #序列化 info[ "age" ] = 21 f.write(json.dumps(info)) f.close() |
运行结果:
总结:json只能处理一些简单的数据类型,如:列表、字典。字符串等。xml正在被json逐步取代。
json以后使用只dumps一次,loads一次即可。
2、pickle:通过pickle模块的序列化操作我们能够将程序中运行的对象信息保存到文件中去,永久存储;
通过pickle模块的反序列化操作,我们能够从文件中创建上一次程序保存的对象。
只能在python语言中用,不能用于其他的语言。
(1)pickle数据序列化:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
#!/usr/bin/env python # -*- coding:utf-8 -*- # author:zhengzhengliu import pickle def sayhi(name): print ( "hello" ,name) info = { "name" : "liu" , "age" : 32 , "func" :sayhi } f = open ( "test.txt" , "wb" ) print () f.write(pickle.dumps(info)) f.close() |
运行结果如下图:
(2)pickle数据反序列化:
1
2
3
4
5
6
7
8
9
|
#!/usr/bin/env python # -*- coding:utf-8 -*- # author:zhengzhengliu import pickle def sayhi(name): print ( "hello" ,name) f = open ( "test.txt" , "rb" ) data = pickle.loads(f.read()) print (data[ "func" ]( "liu" )) |
运行结果:
hello liu
none
ps:这里再为大家推荐几款比较实用的json在线工具供大家参考使用:
json在线格式化工具:https://tool.zzvips.com/t/jsonformat/
在线excel/json互相转换工具:https://tool.zzvips.com/t/excel2json/
json代码在线格式化/美化/压缩/编辑/转换工具:https://tool.zzvips.com/t/jsonjiexi/
在线json压缩/转义工具:https://tool.zzvips.com/t/jsonzip/
希望本文所述对大家python程序设计有所帮助。
原文链接:https://blog.csdn.net/loveliuzz/article/details/78092056