標籤:mod div 無法 還原序列化 hello 作者 arm pycharm 字典
json
json是進行程式資料類型的序列化與還原序列化的模組之一。利用它可以進行不同平台,不同程式下的資料交換或者是程式暫時儲存資料的一種方法。下面看一看json的用法:
1 #json_序列化.py 2 import json 3 dic={ 4 "id":"123456", 5 "name":"Jack", 6 "country":"China" 7 } 8 date=json.dumps(dic) 9 with open("demo.txt","w") as f:10 f.write(date)11 12 #json_還原序列化.py13 import json14 with open("demo.txt","r") as f:15 dic1=json.loads(f.read())16 print(dic1["name"])
上面展示了兩個檔案的內容,第一個檔案是將一個字典序列化成字串(使用dumps()方法),然後寫入一個檔案(demo.txt)。第二個檔案是將demo.txt中的內容讀取出來,然後用loads()方法將其還原序列化可以執行的那個字典對象,並且列印出字典的“name”的內容。
其實除了dumps()和loads()兩個方法之外,json還有兩個更簡單的方法:dump()和load()。下面示範用法:
1 #json_序列化2.py 2 import json 3 dic={ 4 "id":"123456", 5 "name":"Jack", 6 "country":"China" 7 } 8 with open("demo.txt","w") as f: 9 date=json.dump(dic,f)10 11 12 13 #json_還原序列化2.py14 import json15 with open("demo.txt","r") as f:16 dic1=json.load(f)17 print(dic1["name"])
對比一下就知道,dump()和load()是將dumps()和loads()以及檔案的讀寫操作進行的封裝。
pickle
pickle同樣擁有json的上述四種方法,並且用法一模一樣,在這裡我就不做示範。但是pickle的功能更加強大。json只能夠序列化一些比較簡單的資料對象,如列表,字典等等。而pickle則還可以序列化函數,類等複雜物件。
下面示範一下pickle怎樣序列化和還原序列化一個函數。
1 #pickle_序列化.py 2 import pickle 3 #定義函數hello 4 def hello(name): 5 print("hello",name) 6 #定義列表,把hello也存進去 7 dic1={ 8 "name":"Mark", 9 "func":hello10 }11 with open("demo.txt","wb") as f:12 pickle.dump(dic1,f)13 14 #pickle_還原序列化.py15 import pickle16 #######################17 def hello(name):18 print("hello",name)19 #######################20 with open("demo.txt","rb")as f:21 dic2=pickle.load(f)22 dic2["func"]("Jack")
上面同樣展示了兩個檔案的內容注意。要注意以下的問題:
1.當涉及到函數,類等的序列化和還原序列化的時候,在開啟檔案的時候都要以二進位的形式開啟,注意展示中的“wb”,“rb”
2.如果要使還原序列化出來的函數可以再新檔案裡執行的話,必須要把前面定義好的函數的原始碼複製到新檔案裡(注意pickle_還原序列化.py中的兩排#行內的內容),否則將無法運行,如果沒有#號內的內容的話,程式會報錯:AttributeError: Can‘t get attribute ‘hello‘ on <module ‘__main__‘ from ‘D:/Users/LENOVO/PycharmProjects/Myfirstflask/about_json反.py‘>
3.可以對複製過來的函數的原始碼變更,只需要保證函數名與序列化時所用的函數名一致即可,更改後如果調用該函數,則按照更改後的函數執行(當然這種更改必須是有必要的)
彭前超
時間:2017/6/13 19:45
json與pickle