python學習day4之路文件的序列化和反序列化
json和pickle序列化和反序列化
json是用來實現不同程序之間的文件交互,由於不同程序之間需要進行文件信息交互,由於用python寫的代碼可能要與其他語言寫的代碼進行數據傳輸,json支持所有程序之間的交互,json將取代XML,由於XML格式稍微比較復雜。現在程序之間的交互都是用json來進行文件信息的交互。
在使用json序列化和反序列化的時候,dump一次,就要load一次,不能操作。
json序列化的過程,就是寫入文件中,讓另外一個編程語言進行調用:
import json
info = {"alex":"sb","test":"hard"}
with open("file","w") as f:
f.write(json.dumps(info))
上述代碼使用json將info字典信息寫入到一個文件中,文件中只能存儲字符串格式的信息,或者二進制文件的信息,不能存放數字等信息,放入文件中的信息都是字符串類型的,這點一定要註意.
json反序列化的過程:
import json
‘‘‘反序列化起始就是把dump進去的信息進行提取,以實現不同編程語言的交互‘‘‘
with open("file","r") as f:
data = json.loads(f.read())
print(data)
print(type(data))
print(data["alex"])
上面代碼,將使用json格式存入的信息讀取出來,如下所示:
{‘test‘: ‘hard‘, ‘alex‘: ‘sb‘}
<class ‘dict‘>
sb
上述代碼實現了將字符串信息讀取問字典的功能,其實,序列化和反序列化就是將原來的格式先轉化為字符串,然後在讀取出來的過程,以便能夠實現交互.
我們也可以使用其他方式進行序列化和反序列化,我們知道,有一個函數eval(),能夠實現把字符串信息轉化為原本樣式,如下:
info = [11,22,33,65,33]
with open("test.text","w") as f:
f.write(str(info)) #使用wirte()只能向文件中寫入字符串格式的信息,不能寫入其他類型的信息
with open("test.text","r") as f_obj:
data = f_obj.read()
data = eval(data)
print(type(data))
print(data)
程序運行如下:
<class ‘list‘>
[11, 22, 33, 65, 33]
上述過程中,我們利用python自帶的eval()函數也實現了序列化和反序列化的過程,但是由於序列化和反序列化是在同一個程序中實現的,在其他程序中有沒有eval()是不確定的,但是json支持所有的編程語言,所以現在一般都使用json實現不同編程語言之間的信息交互.
dump和load也是實現上面dumps和loads的功能,只是實現的方式不一樣而言,語法稍微有一些區別,如下:
dump序列化:
import json
info = {"alex":"sb","test":"hard"}
with open("file","w") as f:
json.dump(info,f)
load()反序列化:
import json
‘‘‘反序列化起始就是把dump進去的信息進行提取,以實現不同編程語言的交互‘‘‘
with open("file","r") as f:
data = json.load(f)
print(data)
print(type(data))
print(data["alex"])
上面程序實現了序列化和反序列化的功能,dump(信息,文件路徑),load(文件路徑),從哪個文件讀取信息.
在不同程序間實現數據的交換.
不同程序之間的數據交換,或者是將字符串的信息轉化為原有的形式;
eval()函數的功能也很強大,能夠之間將字符串形式的信息轉化為原有的信息,如下:
>>> dic = "{‘alex‘:‘sb‘,‘try‘:‘workhard‘}"
>>> data = eval(dic)
>>> data
{‘try‘: ‘workhard‘, ‘alex‘: ‘sb‘}
程序只dump一次,load一次,不能dump多次.dumps好幾個文件實現;
python學習day4之路文件的序列化和反序列化