序列化

序列化是指把内存里的数据类型转变成字符串,以使其能存储到硬盘或通过网络传输到远程,因为硬盘或网络传输时只能接受bytes

  • 把内存数据 转成字符,叫序列化
  • 把字符 转成内存数据,叫反序列化

模块 json

json.dumps() 序列化一个对象

import json
data = { 'roles':[
{'role':'monster','type':'pig','life':50},
{'role':'hero','type':'关羽','life':80},
]
} d = json.dumps(data) #转成字符串
print(type(d))
print(d)

打印结果:

<class 'str'>
{"roles": [{"role": "monster", "type": "pig", "life": 50}, {"role": "hero", "type": "\u5173\u7fbd", "life": 80}]}

json.lodads() 从一个对象加载数据

import json
data = { 'roles':[
{'role':'monster','type':'pig','life':50},
{'role':'hero','type':'关羽','life':80},
]
}
d = json.dumps(data) #仅转成字符串
d2 = json.loads(d)
print(type(d2),d2)
#<class 'dict'>
#{'roles': [{'role': 'monster', 'type': 'pig', 'life': 50}, {'role': 'hero', 'type': '关羽', 'life': 80}]}

json.dump() 将一个对象序列化存入文件

import json
data = { 'roles':[
{'role':'monster','type':'pig','life':50},
{'role':'hero','type':'关羽','life':80},
]
} f = open('test.json',mode='w')
json.dump(data, f) #转成字符并写入文件

结果:会将 data中的数据写入文件


json.load() 从一个打开的文件句柄加载数据

import json

f = open('test.json','r')
data = json.load(f)
print(data['roles'])

打印:

[{'role': 'monster', 'type': 'pig', 'life': 50}, {'role': 'hero', 'type': '关羽', 'life': 80}]

import json

f = open('json_file.json','w',encoding='utf-8')

data1 = {'name':'nurato','skill':'螺旋丸'}
data2 = [1,2,3,'sunshine']
json.dump(data1, f)
json.dump(data2, f)

结果:

说明: 可以dump多次数据并写入文件

我们现在json.load 一下

f = open('json_file.json','r',encoding='utf-8')
json.load(f)
# 程序报错:json.decoder.JSONDecodeError

只load 一次,并且json格式有问题,会报错


------------------------------------------------分割线------------------------------------------------


模块pickle

import pickle

data1 = {'name':'nurato','skill':'螺旋丸'}

f = open('data.pkl','wb')
pickle.dump(data1,f)

结果:创建了一个 名为 data.pkl 的文件


import pickle

f = open('data.pkl','rb')
d = pickle.load(f)
print(type(d))
print(d)
#<class 'dict'>
#{'name': 'nurato', 'skill': '螺旋丸'}

关于json 和 pickle

JSON:

优点:跨语言、体积小

缺点:只能支持int\str\list\tuple\dict

Pickle:

优点:专为python设计,支持python所有的数据类型

缺点:只能在python中使用,存储数据占空间大


---------------------------------------分割线-------------------------------------------


序列化 shelve 模块

import shelve

f = shelve.open('shelve_test') #打开一个文件

names = ['python', 'html', 'java']
info = {'name': 'jack', 'age': 25} f['names'] = names
f['info_dic'] = info
f.close()

结果:会创建 shelve_test 文件


import shelve

f = shelve.open('shelve_test') #打开一个文件
print(list(f.keys())) #['names', 'info_dic']
print(list(f.items())) #[('names', ['python', 'html', 'java']), ('info_dic', {'name': 'jack', 'age': 25})]
print(f.get('names')) #['python', 'html', 'java']
print(f.get('info_dic')) #{'name': 'jack', 'age': 25}

增加内容:

import shelve

f = shelve.open('shelve_test') #打开一个文件
f['book'] = [1,2,3,4,5] #增加内容
f.close() f2 = shelve.open('shelve_test')
print(list(f2.keys())) # ['names', 'info_dic', 'book']
print(f2['book'])

我们来修改一下内容:(只能通过 f['book'] = [1,2,'肖申克的救赎',4,5]) 这样的方式重新赋值来更改

f['book'][0] = 'new book' 这样的方式是不可以的。

import shelve

f = shelve.open('shelve_test')  # 打开一个文件
f['book'] = [1,2,'肖申克的救赎',4,5]
f.close() f2 = shelve.open('shelve_test')
print(f2['book']) # [1, 2, '肖申克的救赎', 4, 5]

删除内容:

import shelve

f = shelve.open('shelve_test') #打开一个文件
del f['book']
f.close() f2 = shelve.open('shelve_test')
print(list(f2.items()))
# 打印 : [('names', ['python', 'html', 'java']), ('info_dic', {'name': 'jack', 'age': 25})]

python序列化_json,pickle,shelve模块的更多相关文章

  1. Python(序列化json,pickle,shelve)

    序列化 参考:https://www.cnblogs.com/yuanchenqi/articles/5732581.html # dic = str({'1':'111'}) # # f = ope ...

  2. python序列化: json & pickle & shelve 模块

    一.json & pickle & shelve 模块 json,用于字符串 和 python数据类型间进行转换pickle,用于python特有的类型 和 python的数据类型间进 ...

  3. python 常用模块 time random os模块 sys模块 json & pickle shelve模块 xml模块 configparser hashlib subprocess logging re正则

    python 常用模块 time random os模块 sys模块 json & pickle shelve模块 xml模块 configparser hashlib  subprocess ...

  4. day6_python序列化之 json & pickle & shelve 模块

    一.json & pickle & shelve 模块 json,用于字符串 和 python数据类型间进行转换pickle,用于python特有的类型 和 python的数据类型间进 ...

  5. Python全栈之路----常用模块----序列化(json&pickle&shelve)模块详解

    把内存数据转成字符,叫序列化:把字符转成内存数据类型,叫反序列化. Json模块 Json模块提供了四个功能:序列化:dumps.dump:反序列化:loads.load. import json d ...

  6. Day 21 序列化模块_Json,Pickle,Shelve

    序列化 , 数据类型,列表 元组, 字符串 只有字符串能被写入文件中. 能在网络上传输的只能是bytes - 字符串 把要传输的和要存储的内容转换成字符串. 字符串 转换回 要传输和存储的内容 序列化 ...

  7. Python序列化,json&pickle&shelve模块

    1. 序列化说明 序列化可将非字符串的数据类型的数据进行存档,如字典.列表甚至是函数等等 反序列化,将通过序列化保存的文件内容反序列化即可得到数据原本的样子,可直接使用 2. Python中常用的序列 ...

  8. 12 python json&pickle&shelve模块

      1.什么叫序列化 序列化是指把内存里的数据类型转变成字符串,以使其能存储到硬盘或通过网络传输到远程,因为硬盘或网络传输时只能接受bytes(字节) 2.用于序列化的两个模块,json和pickle ...

  9. Python学习 :json、pickle&shelve 模块

    数据交换格式 json 模块 json (JavaScript Object Notation)是一种轻量级的数据交换语言,以文字为基础,且易于让人阅读.尽管 json 是JavaScript的一个子 ...

随机推荐

  1. centOS7关闭防火墙的命令

    centOS7下关闭防火墙的命令已经改了,如下:      systemctl stop firewalld

  2. backbone应用笔记

    由于公司手机端web的需要,最近开始用上backbone,之前觉得很难学,也一直没看到前端mvc具体是个啥,后来由于项目紧急,就抽空看了一遍underscore和backbone的源码,收获还是蛮大的 ...

  3. 结合manage.py,在flask项目中使用websocket模块--- flask-socketio

    前言:       - 为什么我要使用 flask-socketio模块,而不是flask-sockets?       - 因为flask-socketio与前端流行的websocket库socke ...

  4. 4.kafka的安装部署

    为了安装过程对一些参数的理解,我先在这里提一下kafka一些重点概念,topic,broker,producer,consumer,message,partition,依赖于zookeeper, ka ...

  5. 【代码笔记】Java深入学习——实现客户端发送文件到服务器的文件传输

    Server.java package com.huaxin.lesson02; import java.io.FileOutputStream; import java.io.InputStream ...

  6. js实现图片延时加载的原理

    实现原理: 附:(http://www.cnblogs.com/fishtreeyu/archive/2011/03/12/1982067.html) 把所有需要延时加载的图片改成如下的格式: < ...

  7. PHP:数字转Excel列头

    转自我的个人博客:阔野飞花 http://www.rexcao.net/archives/169 前段时间升级一个项目的Excel导出功能,这次的列数大概有60多条,在处理过程中发现一个问题,原先做好 ...

  8. springTask和Schedule学习

    Spring 4.x Task 和 Schedule 概述 http://www.jianshu.com/p/1778f6b9646e spring framework --- 定时任务(翻译官方文档 ...

  9. Android应用开发基础之五:网络编程(二)

    HttpClient 发送get请求 创建一个客户端对象 HttpClient client = new DefaultHttpClient(); 创建一个get请求对象 HttpGet hg = n ...

  10. May 18th 2017 Week 20th Thursday

    The greater the struggle, the more glorious the triumph. 挑战愈艰巨,胜利愈辉煌. Sometimes it would be better t ...