序列化

序列化是指把内存里的数据类型转变成字符串,以使其能存储到硬盘或通过网络传输到远程,因为硬盘或网络传输时只能接受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. Springboot - 集成 JPA

    1.什么是 JPA? JPA就是Java Persistence API的意思,是JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中. 2. JPA 具有什么优 ...

  2. AngularJS 实现 Table的一些操作(示例大于实际)

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <script ty ...

  3. c# 远程连接共享文件

    c# 远程连接共享文件 /// <summary> /// 连接远程共享文件夹 /// </summary> /// <param name="path&quo ...

  4. mysql应用学习-windows(64位)安装和配置mysql(5.6.20)

    下载安装包MySQL Installer 下载地址1:http://dev.mysql.com/downloads/windows/installer/ 说明:官网当前版本 5.6.22:虽然只有32 ...

  5. C# 判断List集合中是否有重复的项

    /*在.Net 3.5 以上*/ ).Count() >= ;

  6. 使用IDEA创建java项目(hello word)

    前提:已安装好jdk,配置好环境变量.我使用的是java 8. 首先在自己的D盘下建一个文件夹,用来存放我们待会新建的项目,我创建了IdeaProject: 1,第一步打开idea 第二步选择创建ja ...

  7. 转载:解决IE下a标签会触发window.onbeforeunload的问题

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <hea ...

  8. Python中变量的本质探索

    Python中变量的本质探索 参考:Vamei博客Python进阶09 动态类型 ''' a = [1,2,3] ''' (1)这条"赋值语句"实际上是将a指向对象"[1 ...

  9. python进程与线程介绍

    很多同学都听说过,现代操作系统比如Mac OS X,UNIX,Linux,Windows等,都是支持“多任务”的操作系统. 什么叫“多任务”呢?简单地说,就是操作系统可以同时运行多个任务.打个比方,你 ...

  10. 两种计算Java对象大小的方法

    之前想研究一下unsafe类,碰巧在网上看到了这篇文章,觉得写得很好,就转载过来.原文出处是: http://blog.csdn.net/iter_zc/article/details/4182271 ...