Python基礎語法 - json & pickle
阿新 • • 發佈:2018-03-24
amp pycharm ext con can 網絡傳輸 不兼容 rmp attr
情景
例1 dic = str({‘age‘:‘18‘}) f = open(‘text‘,‘w‘) f.write(dic) f.close() 例2 f = open(‘text‘,‘r‘) data = f.read() print(eval(data)[‘age‘])
當我們將內存數據對象存儲到文件中,是無法直接將字典對象存儲,必須轉化為字符串格式str(),當我們通過f.read()方法讀取文件中存儲的字典格式對象時,讀取的也是字符串個是,必須用eval()方法轉化,這種方法很Lou。
用於序列化的兩個模塊
- json,用於字符串 和 python數據類型間進行轉換
- pickle,用於python特有的類型 和 python的數據類型間進行轉換
Json模塊提供了四個功能:dumps、dump、loads、load
pickle模塊提供了四個功能:dumps、dump、loads、load
json模塊
再上面的情形中,更好的方法是通過Json模塊,因為JSON表示出來就是一個字符串,可以被所有語言讀取,也可以方便地存儲到磁盤或者通過網絡傳輸。JSON不僅是標準格式,並且比XML更快,而且可以直接在Web頁面中讀取,非常方便。
import json dic = {‘age‘:‘28‘} #寫入文件 data = json.dumps(dic) f = open(‘text‘,‘w‘) f.write(data) f.close()#讀取文件 f = open(‘text‘,‘r‘) data = f.read() content = json.loads(data) print(content[‘age‘])
-
json無法轉化函數和類
pickle模塊
Pickle的問題和所有其他編程語言特有的序列化問題一樣,就是它只能用於Python,並且可能不同版本的Python彼此都不兼容,因此,只能用Pickle保存那些不重要的數據,不能成功地反序列化也沒關系。
import pickle def foo(): print(‘ok‘) #寫入文件 data = pickle.dumps(foo) f= open(‘text‘,‘wb‘) f.write(data) f.close() #讀取文件 f = open(‘text‘,‘rb‘) data = f.read() content = pickle.loads(data) content() #Can‘t get attribute ‘foo‘ on <module ‘__main__‘ from ‘C:/Users/LG/PycharmProjects/mystuff/March/day23/json_module.py‘>
- 註意:寫入模式必須為wb、rb
- 讀取文件是報錯是由於找不到函數內存地址,所以如果想要讀取時,函數必須在內存地址。
dump & load 方法
1. dump
import json dic = {‘age‘:‘28‘} f = open(‘text‘,‘w‘) json.dump(dic,f) f.close()
- dump將進行轉化與寫入的過程
2. load
import json f = open(‘text‘,‘r‘) data = json.load(f) print(data[‘age‘]) f.close()
- load將進行轉化與讀取的過程
Python基礎語法 - json & pickle