序列化模塊之 pickle 和 json

用於序列化的兩個模塊:python

  • json,用於字符串 和 python數據類型間進行轉換
  • pickle,用於python特有的類型 和 python的數據類型間進行轉換

  Json模塊提供了四個功能:dumps、dump、loads、loadjson

  pickle模塊提供了四個功能:dumps、dump、loads、load函數

首先,咱們看看python pickle的序列化:編碼

pickle模塊實現了基本的數據序列和反序列化。spa

pickle模塊,用於python特有的類型 和 python的數據類型間進行轉換code

pickle模塊提供了四個功能:dumps、dump、loads、load,這裏主要介紹pickle.dump()和pickle.load() orm

pickle.dump() 對象

  經過pickle模塊的序列化操做咱們可以將程序中運行的對象信息保存到文件中去,永久存儲.blog

pickle.load() ip

  經過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類型

 這裏只是簡單的用法,更多瞭解請百度...

相關文章
相關標籤/搜索