什么是序列化,Python中json的load,loads,dump,dumps和pickle的load,loads,dump,dumps的區別


我們把對象(變量)從內存中變成可存儲或傳輸的過程稱之為序列化

json就是一種序列化的傳輸手段(json序列化的是字典類型的數據類型

 

 

 

Python把一個字典序列化到一個文本文件中,使用json.dump或者dumps,如下:

import json
dic={'name':'ljj','age':18}
data=json.dumps(dic)
f=open('json_text','w')
f.write(data)
f.close()

或者如下:

import json
dic={'name':'ljj','age':18}

f=open('json_text2','w')
# data=json.dumps(dic)
# f.write(data)
json.dump(dic,f)
f.close()

dump與dumps的區別就是dumps需要自己將序列化的字典write到文件中,而dump內部已經幫我們做了這一步

從文本文件中讀取,使用json.load或者loads,則如下:

import json
f = open('json_text','r')
data=f.read()
data=json.loads(data)
print(data['name'])

或者如下:

import json
f = open('json_text2','r')
# data=f.read()
data=json.load(f)
print(data['name'])

load與loads的區別就是loads需要自己將文件中的信息反序列化到內存中再read,而load內部已經幫我們做了這一步

 

pickle就是一種序列化的傳輸手段(pickle序列化的是函數和類

序列化到文件中

import pickle

def foo():
    print('ok')

data = pickle.dumps(foo)
f = open('PICKLE_text','wb')
f.write(data)
f.close()

反序列化到內存里

import pickle

def foo():
    print('ok')
f = open('PICKLE_text','rb')

data = f.read()
data=pickle.loads(data)

data()#需要上面添加foo()函數才不會報錯,因為反序列化之后,foo的引用地址會找不到foo函數,需要重新加載

 shelve模塊

shelve模塊比pickle模塊簡單,只有一個open函數,返回類似於字典的對象,可讀可寫:key必須為字符串,而值可以是python所支持的數據類型

import shelve
f = shelve.open(r'SHELVE_text.txt')
f['info'] = {'name':'ljj','age':18}
f['shopping'] = {'name':'手機','price':1000}
data = f.get('shopping')
print(data)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM