dump 和 dumps 都實現了序列化load 和 loads 都實現反序列化
變數從記憶體中變成可儲存或傳輸的過程稱之為序列化
序列化是將物件狀態轉化為可儲存或可傳輸格式的過程。
變數內容從序列化的物件重新讀到記憶體裡稱之為反序列化
反序列化是流轉換為物件。
1. load 和 loads(反序列化)
load:針對檔案控制代碼,將json格式的字元轉換為dict,從檔案中讀取(將string轉換為dict)
1
a_json = json.load(open('demo.json','r'))
loads:針對記憶體物件,將string轉換為dict(將string轉換為dict)
1
a = json.loads('')
2. dump 和 dumps(序列化)
dump:將dict型別轉換為json字串格式,寫入到檔案(易儲存)
12
a_dict =json.dump(a_dict, open('demo.json', 'w')
dumps:將dict轉換為string(易傳輸)
12
a_dict =a_str = json.dumps(a_dict)
根據序列化和反序列的特性
loads: 是將string轉換為dict
dumps: 是將dict轉換為string
load: 是將裡json格式字串轉化為dict,讀取檔案
dump: 是將dict型別轉換為json格式字串,存入檔案
json高階
序列化
1234567
89
# 使用class物件的__dict__方法class student(object):
def __init__(self, name, age, score):
self.name = name
self.age = age
self.score = score
import json
s = student('bob', 20, 88)
print(json.dumps(s, default=lambda obj: obj.__dict__))
反序列化
12345
def dict2student(d):return student(d['name'], d['age'], d['score'])
json_str = ''
print(json.loads(json_str, object_hook=dict2student))
python提供兩個模組來實現序列化:cpickle和pickle。這兩個模組功能是一樣的,區別在於cpickle是c語言寫的,速度快,pickle是純python寫的,速度慢。
變數從記憶體中變成可儲存或傳輸的過程稱之為序列化,在python中叫pickling
變數內容從序列化的物件重新讀到記憶體裡稱之為反序列化,即unpickling
1234
try:import cpickle as pickle
except importerror:
import pickle
1.將記憶體物件訪問到磁碟
12
a = dict(a=1, b=2, c=3)pickle.dumps(a) # 將物件序列化為str然後存入檔案
12
a = dict(a=1, b=2, c=3)pickle.dump(a, open('a.txt', 'wb')) # 使用dump直接把物件序列化為file-like object,注意是二進位制儲存
2.從磁碟讀取到記憶體物件
1
pickle.load(open('a.txt', 'rb')) #從file-like object中直接反序列化出物件
load 和 loads的區別
學習的東西哦隨著時間的推移也越來越多,知識是不斷積累的,但是奈何好記性不如爛筆頭,學過的東西也老是會忘,今天在檔案中讀取資料入庫的時候竟然忘了load 和 loads 的區別,分別都是用來幹什麼的用的,又翻開之前的 筆記回憶錄下,在此寫下以加深印象 具體使用方法 json.dumps 實現pytho...
json中loads的用法
python中json中的loads 和dumps 它們的作用經常弄換了,這裡記錄下,loads方法是把json物件轉化為python物件,dumps方法是把pyhon物件轉化為json物件,我是這麼理解的,先上段loas的 usr bin env python coding utf8 import...
Hibernate中get和Load比較
load支援延遲載入.它認為該資料是一定存在的,所以會使用 進行延遲載入.若資料不存在,只能拋異常.get方法,不支援延遲載入.若資料不存在就直接返回null.load方法拋異常是指在使用該物件的資料時,資料庫中不存在該資料時拋異常,而不是在建立這個物件時。在load時會先去查一下session快取...