1. 程式人生 > >20、序列化模塊和模塊

20、序列化模塊和模塊

clas true 依賴 內置 擴展 pos 寫到 是否 pic

1、什麽是序列化?

  就是轉向一個字符串的數據類型

2、為什麽序列化?

  1、數據存儲(將對象從一個地方傳遞到另一個地方。)

  2、網絡上傳輸的時侯

  3、以某種存儲形式使自定義對象持久化

3、序列化:從數據類型轉向字符串的過程

  反序列化:從字符串轉向數據的過程

二、jason模塊提供的四個功能:domp、load、domps、loads

  dumps和loads

import json
dic = {‘k1‘:‘v1‘,‘k2‘:‘v2‘,‘k3‘:‘v3‘}
str_dic = json.dumps(dic)  #序列化:將一個字典轉換成一個字符串
print(type(str_dic),str_dic)  #<class ‘str‘> {"k3": "v3", "k1": "v1", "k2": "v2"}
#註意,json轉換完的字符串類型的字典中的字符串是由""表示的

dic2 = json.loads(str_dic)  #反序列化:將一個字符串格式的字典轉換成一個字典
#註意,要用json的loads功能處理的字符串類型的字典中的字符串必須由""表示
print(type(dic2),dic2)  #<class ‘dict‘> {‘k1‘: ‘v1‘, ‘k2‘: ‘v2‘, ‘k3‘: ‘v3‘}


list_dic = [1,[‘a‘,‘b‘,‘c‘],3,{‘k1‘:‘v1‘,‘k2‘:‘v2‘}]
str_dic = json.dumps(list_dic) #也可以處理嵌套的數據類型 
print(type(str_dic),str_dic) #<class ‘str‘> [1, ["a", "b", "c"], 3, {"k1": "v1", "k2": "v2"}]
list_dic2 = json.loads(str_dic)
print(type(list_dic2),list_dic2) #<class ‘list‘> [1, [‘a‘, ‘b‘, ‘c‘], 3, {‘k1‘: ‘v1‘, ‘k2‘: ‘v2‘}]

loads和dumps

  

  load和dump

import json
f = open(‘json_file‘,‘w‘)
dic = {‘k1‘:‘v1‘,‘k2‘:‘v2‘,‘k3‘:‘v3‘}
json.dump(dic,f)  #dump方法接收一個文件句柄,直接將字典轉換成json字符串寫入文件
f.close()

f = open(‘json_file‘)
dic2 = json.load(f)  #load方法接收一個文件句柄,直接將文件中的json字符串轉換成數據結構返回
f.close()
print(type(dic2),dic2)

load和dump

2、pickle模塊

  1、所有的python中的數據類型都可以轉化成字符串形式

  2、pickle序列化的內容只有python能理解

  3、且部分反序列化依賴python代碼

3、shelve

  序列化句柄

  使用句柄直接操作,非常方便

模塊

1、模塊調用的順序:

 ·所有的模塊導入都應該盡量往上寫,順序為:內置模塊、擴展模塊、自定義模塊

2、模塊導入的規範:

   import

  1、import 模塊名
  (調用的時候:模塊名.變量名, 和本文件中的變量名完全不沖突)
   2、 import 模塊名 as 重命名的模塊名 : 提高代碼的兼容性
   3、 import 模塊1,模塊2(調用多個模塊)

   from import

   1、from 模塊名 import 變量名

   直接使用 變量名 就可以完成操作,如果本文件中有相同的變量名會發生沖突

   2、from 模塊名 import 變量名字 as 重命名變量名
3、 from 模塊名 import 變量名1,變量名2
4、 from 模塊名 import * (將模塊中的所有變量名都放到內存中,如果本文件中有相同的變量名會發生沖突)
  5、from 模塊名 import * 和 __all__ 是一對 (沒有這個變量,就會導入所有的名字,如果有all 只導入all列表中的名字)

3、模塊執行的順序  

  1、先從sys.modules裏查看是否已經被導入(所以模塊不會重復被導入)

  2、如果沒有導入,就依據sys.path路徑去尋找模塊(sys.path導入模塊)

  3、就到了就導入模塊

  4、創建這個模塊的命名空間

  5、執行文件,把文件中的名字都放入命名空間裏

4、在python中自定義的模塊中,有的時候對於這個模塊的修改需要執行一個自己單獨的結果(比如打印一個只在本模塊(文件)顯示的內容),而在調用的模塊就不顯示這個單獨

  的內容,所以這裏有一個需要說明的內容:(寫到這裏有些奔潰,好像沒有人看這個,這些都是我自己寫的話)

  __name__(亮相了!!!!!!!)

在模塊中 有一個變量__name__,
當我們直接執行這個模塊的時候,__name__ == __main__
當我們執行其他模塊,在其他模塊中引用這個模塊的時候,這個模塊中的__name__ == 模塊的名字

  http://www.cnblogs.com/Eva-J/articles/7228075.html#_label9

20、序列化模塊和模塊