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
3.可以對複製過來的函數的原始程式碼進行更改,只需要確保函數名稱與序列化時所用的函數名稱一致即可,更改後如果呼叫函數,則按照更改後的函數執行(當然這種更改必須是有必要的)
以上是json與pickle的用法介紹的詳細內容。更多資訊請關注PHP中文網其他相關文章!