讀取json文件的每一行,然後json.loads將字符串轉爲字典(數據)。json.load將文件打開,並且把字符串轉爲數據類型。
json.dumps將字典(數據)轉爲字符串,然後用json.dump,將字符串寫入json文件中。
序列化和反序列化
變量從內存中變成可存儲或傳輸的過程稱之爲序列化,序列化是將對象狀態轉化爲可保存或可傳輸格式的過程。
變量內容從序列化的對象重新讀到內存裏稱之爲反序列化,反序列化是流轉換爲對象。
json和pickle都可以將python的對象保存爲一個文件,打開該文件的時候可以保持對象的數據類型不變。
json和pickle的區別:
json:用於字符串和Python數據類型間進行轉換,可以跨平臺
pickle支持所有數據類型,但僅限於python中,不能跨平臺
json文件打開可以識別其中的內容,pkl文件打開是亂碼
對於json
dump 和 dumps 都實現了序列化
load 和 loads 都實現反序列化
load 和 loads的區別:
load:針對文件句柄,將json格式的字符轉換爲dict,從文件中讀取 (將string轉換爲dict)
例子:a_json = json.load(open('demo.json','r'))
loads:針對內存對象,將string轉換爲dict (將string轉換爲dict)
例子:a = json.loads('{'a':'1111','b':'2222'}')
dump 和 dumps的區別:
dump:將dict類型轉換爲json字符串格式,寫入到文件 (易存儲)
例子:a_dict = {'a':'1111','b':'2222'}
json.dump(a_dict, open('demo.json', 'w')
dumps:將dict轉換爲string (易傳輸)
a_dict = {'a':'1111','b':'2222'}
a_str = json.dumps(a_dict)
a_str is : '{"a": "1111", "b": "2222"}'
總結:
根據序列化和反序列的特性
loads: 是將string轉換爲dict
dumps: 是將dict轉換爲string
load: 是將裏json格式字符串轉化爲dict,讀取文件
dump: 是將dict類型轉換爲json格式字符串,存入文件
對於pickle
Python提供兩個模塊來實現序列化:cPickle和pickle。這兩個模塊功能是一樣的,區別在於cPickle是C語言寫的,速度快,pickle是純Python寫的,速度慢。
pickle可以存儲的類型:
所有python支持的原生類型:布爾值,整數,浮點數,複數,字符串,字節,None。
由任何原生類型組成的列表,元組,字典和集合。
函數,類,類的實例
pickle用法:
pickle.dump(obj, file, protocol=None,) # file需要是wb格式打開
pickle.load(file) # file需要是rb格式打開