序列化模块之 pickle 和 json

用于序列化的两个模块:

  • json,用于字符串 和 python数据类型间进行转换
  • pickle,用于python特有的类型 和 python的数据类型间进行转换

  Json模块提供了四个功能:dumps、dump、loads、load

  pickle模块提供了四个功能:dumps、dump、loads、load

首先,我们看看python pickle的序列化:

pickle模块实现了基本的数据序列和反序列化。

pickle模块,用于python特有的类型 和 python的数据类型间进行转换

pickle模块提供了四个功能:dumps、dump、loads、load,这里主要介绍pickle.dump()和pickle.load() 

pickle.dump() 

  通过pickle模块的序列化操作我们能够将程序中运行的对象信息保存到文件中去,永久存储.

pickle.load() 

  通过pickle模块的反序列化操作,我们能够从文件中创建上一次程序保存的对象.

dump() 和 load() 示例:

 1 #使用pickle.dump()将数据对象保存到文件
 2 
 3 import pickle                                              //导入pickle模块
 4 
 5 account_info = {                                         //定义account_info字典                                   
 6 
 7         349622541 :['123','15000','15000','normal'],
 8         838118461 :['passwd','9000','9000','lock'],
 9 
10 }
11 
12     
13 pkl_file = open('account.pkl','wb')                 //定义pkl文件 account.pkl  wb表示以二进制写模式打开
14 
15 pickle.dump(account_info,pkl_file)             // 使用pickle.dump函数将account_info字典序列化为account.pkl文件.
16 
17 pkl_file.close()                                             //关闭pkl_file文件
#使用pickle.load()从文件中重构python对象
1 import pickle
2 
3 pkl_file = open('account.pkl','rb')                             //rb表示以二进制读模式打开account.pkl文件.
4 
5 account_dic = pickle.load(pkl_file)
6 print account_dic
7 
8 pkl_file.close()
9#如果修改了account_info里面的内容,则需要重新打开文件,再dump数据.
10 account_info['349622541'][1] = 18000     #修改字典里面的内容
11
account_info[''349622541''][2] = 2000
12 pkl_file.open('account.pkl','wb')  #重新打开文件,再将修改的内容dump进去.
13 pickle.dump(account_info,pkl_file) 
14
print account_dic
15 pkl_file.close()

python json 序列化:

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,支持不同程序之间的数据转换.但是只能转换简单的类型如:(列表、字典、字符串、数字、)等,比如日期格式、类对象!json就不行了。

引用模块:

import json

重要函数

  • 编码:把一个Python对象编码转换成Json字符串   json.dumps()
  • 解码:把Json格式字符串解码转换成Python对象   json.loads()

对简单数据类型的json.dumps()和 json.loads():

import json
 
obj = [[1,2,3],123,123.123,'abc',{'key1':(1,2,3),'key2':(4,5,6)}]
p = json.dumps(obj)
print repr(obj)
print p

#################################################################################

输出:

[[1, 2, 3], 123, 123.123, 'abc', {'key2': (4, 5, 6), 'key1': (1, 2, 3)}]
[[1, 2, 3], 123, 123.123, "abc", {"key2": [4, 5, 6], "key1": [1, 2, 3]}]


通过输出的结果可以看出,简单类型通过encode之后跟其原始的repr()输出结果非常相似,但是有些数据类型进行了改变,例如上例中的元组则转换为了列表。在json的编码过程中,会存在从python原始类型向json类型的转化过程.
import json

d= json.loads(p)
print type(decodejson)
print d[4]['key1']
print d

######################################

输出:

<type 'list'>
[1, 2, 3]

[[1, 2, 3], 123, 123.123, u'abc', {u'key2': [4, 5, 6], u'key1': [1, 2, 3]}]

loads方法返回了原始的对象,但是仍然发生了一些数据类型的转化。比如,上例中‘abc’转化为了unicode类型

 这里只是简单的用法,更多了解请百度...

posted @ 2015-12-03 12:05  梦徒  阅读(1034)  评论(0编辑  收藏  举报