dumps-loads & dump-load的区别

申明:资料来源于网络及书本,通过理解、实践、整理成学习笔记。
json模块
import json
dict1={'id':'001','name':'Maxwell'}
#--------------dumps & loads---------------------
with open('dumps.txt','w',encoding='utf-8') as f:
    f.write(json.dumps(dict1))
    f.close()
with open('dumps.txt','r',encoding='utf-8') as f:
    content = f.read()
    f.close()
    print(type(content))
    print(content)
    dict2=json.loads(content)
    print(type(dict2))
    print(dict2)
    print(dict2.get('name'))
    print(dict2['id'])
#--------------dump & load---------------------
with open('dump.txt','w',encoding='utf-8') as f:
    json.dump(dict1,f)   #dump序列化,直接操作原生数据类型对象和文件句柄
    f.close()
with open('dump.txt','r',encoding='utf-8') as f:
    content = json.load(f)  #注意这里先用一个对象把load的内容保存起来,否则关闭文件后就不能再访问了
    f.close()
    print(type(content))
    print(content)
    dict2=content
    print(type(dict2))
    print(dict2)
    print(dict2.get('name'))
    print(dict2['id'])




显示结果:
<class 'str'>
{"id": "001", "name": "Maxwell"}                <<<<<<<<看这里
<class 'dict'>
{'id': '001', 'name': 'Maxwell'}
Maxwell
001
<class 'dict'>
{'id': '001', 'name': 'Maxwell'}                <<<<<<<<看这里
<class 'dict'>
{'id': '001', 'name': 'Maxwell'}
Maxwell
001
pickle模块
import pickle
dict1={'id':'001','name':'Maxwell'}
#--------------dumps & loads---------------------
with open('dumps.txt','wb') as f:
    f.write(pickle.dumps(dict1))
    f.close()
with open('dumps.txt','rb') as f:
    content = f.read()
    f.close()
    print(type(content))
    print(content)
    dict2=pickle.loads(content)
    print(type(dict2))
    print(dict2)
    print(dict2.get('name'))
    print(dict2['id'])
#--------------dump & load---------------------
with open('dump.txt','wb') as f:
    pickle.dump(dict1,f)   #dump序列化,直接操作原生数据类型对象和文件句柄
    f.close()
with open('dump.txt','rb') as f:
    content = pickle.load(f)  #注意这里先用一个对象把load的内容保存起来,否则关闭文件后就不能再访问了
    f.close()
    print(type(content))
    print(content)
    dict2=content
    print(type(dict2))
    print(dict2)
    print(dict2.get('name'))
    print(dict2['id'])


显示结果:
<class 'bytes'>                                  <<<<<<<<看这里
b'\x80\x03}q\x00(X\x02\x00\x00\x00idq\x01X\x03\x00\x00\x00001q\x02X\x04\x00\x00\x00nameq\x03X\x07\x00\x00\x00Maxwellq\x04u.'
<class 'dict'>
{'id': '001', 'name': 'Maxwell'}
Maxwell
001
<class 'dict'>                                   <<<<<<<<看这里
{'id': '001', 'name': 'Maxwell'}
<class 'dict'>
{'id': '001', 'name': 'Maxwell'}
Maxwell
001
pickle序列化函数
import pickle

def sayhi(name):
    print('Hello:', name)

info = {'filename':'test.txt', 'abc':'123','func':sayhi}  #func对应的值是一个函数
print(type(info))
print(info)

with open('test.txt', 'wb') as f:
    data = pickle.dumps(info)
    f.write(data)
    print(type(data))
    print(data)
    print(pickle.loads(data))


显示结果:
<class 'dict'>
{'filename': 'test.txt', 'abc': '123', 'func': <function sayhi at 0x7f057bea8158>}
<class 'bytes'>
b'\x80\x03}q\x00(X\x08\x00\x00\x00filenameq\x01X\x08\x00\x00\x00test.txtq\x02X\x03\x00\x00\x00abcq\x03X\x03\x00\x00\x00123q\x04X\x04\x00\x00\x00funcq\x05c__main__\nsayhi\nq\x06u.'
{'filename': 'test.txt', 'abc': '123', 'func': <function sayhi at 0x7f057bea8158>}
pickle反序列化函数
import pickle

def sayhi(name):   #此处需要定义出函数,因为它不能被直接加载到内存中
    print('Hello:',name)

with open('test.txt','rb') as f:
    data = f.read()
    print(type(data))
    print(data)
    info = pickle.loads(data)
    print(type(info))
    print(info)
print(info.get('filename'))
print(info.get('abc'))
info.get('func')('Tom')



显示结果:
<class 'bytes'>
b'\x80\x03}q\x00(X\x08\x00\x00\x00filenameq\x01X\x08\x00\x00\x00test.txtq\x02X\x03\x00\x00\x00abcq\x03X\x03\x00\x00\x00123q\x04X\x04\x00\x00\x00funcq\x05c__main__\nsayhi\nq\x06u.'
<class 'dict'>
{'filename': 'test.txt', 'abc': '123', 'func': <function sayhi at 0x7f4e18c8f158>}
test.txt
123
Hello: Tom
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值