序列化的目的

1.以某种存储形式使自定义对象持久化
2.将对象从一个地方传递到另一个地方
3.使程序更具有维护性

json

json多语言通用
四个功能:dumps、dump、loads、load

#将对象转换字符串,存储到文件中(dump)
import json
dic = {1:2,3:4,5:6}
f = open('a1.txt','w',encoding='utf-8')
s = json.dump(dic,f)
print(s)
运行结果:
文件中已填写的内容:{": 6}
#将文件的字符串转换成原格式输出(load)
f = open('a1.txt','r',encoding='utf-8')
s1 = json.load(f)
print(type(s1),s1)
运行结果:
<': 6}
将对象转换成字符串
import json
lst = [1,2,3,4]
s = json.dumps(lst)
print(type(s),s)
运行结果:
<class 'str'> [1, 2, 3, 4]
#将字符串转换成对象
lst = [1,2,3,4]
s1 = json.loads(s)
print(type(s1),s1)
运行结果:
<class 'list'> [1, 2, 3, 4]

pickle

python独有的序列化

#将对象转换为文件(内容是字节,看不懂的字节)
import pickle
f = open('a2.py','wb')
dic = {1:2,3:4}
s = pickle.dump(dic,f)
print(s)
运行结果:文件已填写内容,但是是一串看不懂的字节
#将字节文件转换成对象
f1 = open('a2.py','rb')
s1 = pickle.load(f1)
print(s1)
运行结果:{1: 2, 3: 4}
#将对象转换成字节
import pickle
dic = {1:2,3:4}
s = pickle.dumps(dic)
print(s)
运行结果:b'\x80\x03}q\x00(K\x01K\x02K\x03K\x04u.'
#将字节转换成对象
s1 = pickle.loads(s)
print(s1)
运行结果:
{1: 2, 3: 4}

shelve

shelve序列化,比之前讲的json和pickle都要简单,但是一般是用于自己在本地,若上线的话还需要json,但是它操作简单,比较方便
类似于字典的操作

import shelve
f = shelve.open('a2')
#创建了3个文件,a2.bak(是备份),这三个文件的内容都不要有任何的修改
f['name'] = 'alex' #增加键值对
f['age'] = 18
print(f['name'])
打印结果:alex
若要修改里面已有的内容,需要特别注意一下,有可能会修改不成功,需要在,open('a2',writeback = True)

##实现修改name的操作
import shelve
f = shelve.open('a2',writeback=True)
f['name'] = 'baoyuan'
print(f['name'])

Python之路--序列化的更多相关文章

  1. python之路 序列化 pickle,json

    运行代码,毫不留情地得到一个TypeError: Traceback (most recent call last): ... TypeError: <__main__.Student obje ...

  2. Python之路第五天,基础(5)-序列化和字符串格式化

    序列化 Python中用于序列化的两个模块 json 用于『字符串』和『python基本数据类型』间进行转换 pickle 用于『python特有的类型』和『python基本数据类型』间进行转换 js ...

  3. 小白的Python之路 day4 json and pickle数据标准序列化

    一.简述 我们在写入文件中的数据,只能是字符串或者二进制,但是要传入文件的数据不一定全是字符串或者二进制,那还要进行繁琐的转换,然后再读取的时候,还要再转回去,显得很麻烦,今天就来学习标准的序列化:j ...

  4. python之路 目录

    目录 python python_基础总结1 python由来 字符编码 注释 pyc文件 python变量 导入模块 获取用户输入 流程控制if while python 基础2 编码转换 pych ...

  5. Python之路【第十七篇】:Django【进阶篇 】

    Python之路[第十七篇]:Django[进阶篇 ]   Model 到目前为止,当我们的程序涉及到数据库相关操作时,我们一般都会这么搞: 创建数据库,设计表结构和字段 使用 MySQLdb 来连接 ...

  6. Python之路【第十七篇】:Django之【进阶篇】

    Python之路[第十七篇]:Django[进阶篇 ]   Model 到目前为止,当我们的程序涉及到数据库相关操作时,我们一般都会这么搞: 创建数据库,设计表结构和字段 使用 MySQLdb 来连接 ...

  7. Python之路【第十七篇】:Django【进阶篇】

    Python之路[第十七篇]:Django[进阶篇 ]   Model 到目前为止,当我们的程序涉及到数据库相关操作时,我们一般都会这么搞: 创建数据库,设计表结构和字段 使用 MySQLdb 来连接 ...

  8. Python之路,Day4 - Python基础4 (new版)

    Python之路,Day4 - Python基础4 (new版)   本节内容 迭代器&生成器 装饰器 Json & pickle 数据序列化 软件目录结构规范 作业:ATM项目开发 ...

  9. python之路1

    python之路 http协议 html HTML2 CSS选择器 CSS属性操作 CSS属性操作/下 JavaScript(js)/上 JavaScript的对象 JavaScript的对象/下 前 ...

随机推荐

  1. tomcat jndi 数据源

    web.xml <!-- ================================================================================ --& ...

  2. 牛客网Java刷题知识点之什么是代码块、普通代码块、静态代码块、同步代码块、构造代码块以及执行顺序

    不多说,直接上干货! 这种形式的程序段我们将其称之为代码块,所谓代码块就是用大括号({})将多行代码封装在一起,形成一个独立的数据体,用于实现特定的算法.一般来说代码块是不能单独运行的,它必须要有运行 ...

  3. notepad++ 插件大全

    Explorer 资源管理器 Colour Picker 拾色器 SecurePad  加密工具 HTMLTag  NppExport  导出为特殊格式 Simple script  AHKExtLe ...

  4. PHP正则表达式 - 附录(常用正则表达式)

    常用正则表达式附录I 平时做网站经常要用正则表达式,下面是一些讲解和例子,仅供大家参考和修改使用: "^\d+$" //非负整数(正整数 + 0) "^[0-9]*[1- ...

  5. MariaDB 实现主从复制

    實驗目的: MariaDB為MySQL的一個分支,其完全開源.無版權之虞且操作上與 MySQL 一脈相承,實際應用中非常廣泛,軟件本身很小,安裝容易,使用簡單. 但其也有缺點,指令行方式操作,無原生G ...

  6. Properties-转换流-打印流-序列化和反序列化-Commons-IO工具类

    一.Properties 类(java.util)     概述:Properties 是一个双列集合;Properties 属于map的特殊的孙子类;Properties 类没有泛型,propert ...

  7. ae(ArcEngine) java swing开发入门系列(2):ae的类型转换和Proxy类说明

    做过C#版ae的都知道,操作同一个“对象”,用他的不同功能要转换到相应的接口,但java版有时不能直接做类型转换 例如下图在C#是可以的 但在java不行,这样转会报错,看IFeatureClass的 ...

  8. Centos 7 搭建git服务器及使用gitolite控制权限

    一.安装git yum install git git --version #查看git版本 二.升级git(可选,如果之前已经安装git,需要升级git到最新版本) git clone https: ...

  9. python——动态类型

    1.变量,对象,引用 变量是一个系统表的元素,拥有指向对象的连接的空间: 对象是分配的一块内存: 引用是自动形成的从变量到对象的指针: 类型属于对象,而不是变量 a=3;  变量a变成对象3的一个引用 ...

  10. python基础一 day14 生成器函数进阶(1)