python序列化与数据持久化实例详解


Posted in Python onDecember 20, 2019

本文实例讲述了python序列化与数据持久化。分享给大家供大家参考,具体如下:

数据持久化的方式有:

1.普通文件无格式写入:将数据直接写入到文件中

2.普通序列化写入:json,pickle

3.DBM方式:shelve,dbm

相关内容:

  • json
  • pickle
  • shelve
  • dbm

json:

介绍:

按照指定格式【比如格式是字典,那么文件中就是字典】将数据明文写入到文件中,类型是bytes的,比如”中文“就会变成Unicode编码

python序列化与数据持久化实例详解

用法:

  • 首先要导入模块import json
  • 序列化:
    • json.dump(序列化对象,文件对象)
    • json.dumps(序列化对象),返回值是一个字符串,需要手动将这个字符串写入到文件中
print("------json序列化--------")
import json
import time
info={
  'date':time.localtime(),
  'name':'中文'
}
f=open("test.txt","w")
print("---------dump---------")
# json.dump(info,f)
# f.close()
print("---------dumps,---------")
f.write(json.dumps(info))
f.close()
  • 反序列化:
    • json.load(文件对象)
    • json.loads(字符串)
print("------反序列化--------")
import json
f=open("test.txt","r")
print("-------load----------")
# data=json.load(f)#1
# print(data)
print("-------loads----------")
d2=json.loads(f.read())
print(d2)
f.close()

对于多次dump\dumps,如何load\loads取出来:

  • 需要在dump的时候,手动对数据进行划分
print("------json序列化--------")
import json
import time
info={
  'date':time.localtime(),
  'name':'中文'
  # 'func':hello #注:json不可序列化函数
}
info2=['1',2,3,4]
f=open("test.txt","w")
print("---------dumps,---------")#用'\n'来区分两份数据
f.write(json.dumps(info)+"\n")
f.write(json.dumps(info2)+"\n")
f.close()
import json
with open("test.txt") as f:
  a=json.loads(f.readline())
  b=json.loads(f.readline())
  print(a,b)

pickle:

介绍:

  • 用于实现Python数据类型与Python特定二进制格式之间的转换
  • 参数protocol规定了序列化的协议版本,默认情况下使用pikkle序列化数据是bytes的,打开文件的方式必须为二进制格式

用法:

  • 首先导入模块import pickle
  • 序列化:
    • pickle.dump(序列化对象,文件对象)
    • pickle.dumps(序列化对象),返回值是一个字符串,需要手动将这个字符串写入到文件中
import pickle
info={
  'name':'1',
  'age':2,
}
f=open("test2.txt","wb")
pickle.dump(info,f)#序列化方法1
# f.write(pickle.dumps(info))#序列化方法2
f.close()
  • 反序列化:
    • pickle.load(文件对象)
    • pickle.loads(字符串)
print("------反序列化--------")
import pickle
f=open("test2.txt","rb")
data=pickle.loads(f.read())#反序列方法1
print(data)
# data=pickle.load(f)#反序列方法2
# print(data)
f.close()

shelve:

介绍:

  • 专门用于将Python数据类型的数据持久化到磁盘,操作类似于dict

用法:

  • 首先导入模块import
  • shelve打开一个文件: shelve文件对象 = shelve.open(文件名)
  • 写入:shelve文件对象[key]=value
  • 读出:shelve文件对象.get(key)
import shelve,time
d = shelve.open('shelve_test') # 打开一个文件
print("----------写----------")
info ={"name":'lilei',"sex":"man"}
name = ["autuman", "zhangsan", "lisi"]
d["teacher"] = name
d["student"] = info
d["date"] = time.ctime()
print("--------读------------")
print(d.get("teacher"))
print(d.get("student"))
print(d.get("date"))
d.close()

shelve可以很方便的序列化自定义的数据类型、函数:

import shelve,time
class A:
  def hello(self):
    print("123")
d = shelve.open('shelve_test') # 打开一个文件
print("----------写----------")
d['class'] =A
print("--------读------------")
a=d.get('class')()
a.hello()
d.close()

dbm:

介绍:

  • dbm与shelve非常类似,但dbm的键和值必须是字符串类型
  • dbm默认写入的数据是bytes的,将所有字符串都序列化成bytes的

用法:

  • 首先导入模块imort dbm【注意的是由很多个不同的dbm,可以选择来使用,这里使用默认】
  • 打开文件:dbm对象=dbm.open(文件名,打开模式)

python序列化与数据持久化实例详解

  • 写入:dbm对象[key]=value
  • 读取: dbm对象[key]
import dbm
db=dbm.open("test.txt","c")
print("写".center(50,'-'))
db["name"]="1111111111112"
db["name2"]="2222222222222"
print("读".center(50,'-'))
print(db["name"])
print(db["name2"])
db.close()

更多Python相关内容感兴趣的读者可查看本站专题:《Python操作json技巧总结》、《Python编码操作技巧总结》、《Python数据结构与算法教程》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python入门与进阶经典教程》及《Python文件与目录操作技巧汇总》

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
Python中的二叉树查找算法模块使用指南
Jul 04 Python
深入解析Python设计模式编程中建造者模式的使用
Mar 02 Python
Python中如何获取类属性的列表
Dec 26 Python
python 捕获 shell/bash 脚本的输出结果实例
Jan 04 Python
简单的python后台管理程序
Apr 13 Python
Python栈算法的实现与简单应用示例
Nov 01 Python
Python二叉搜索树与双向链表转换算法示例
Mar 02 Python
Django框架视图介绍与使用详解
Jul 18 Python
浅析pandas 数据结构中的DataFrame
Oct 12 Python
python常用排序算法的实现代码
Nov 08 Python
Pycharm 2020最新永久激活码(附最新激活码和插件)
Sep 17 Python
Python time库的时间时钟处理
May 02 Python
爬虫代理池Python3WebSpider源代码测试过程解析
Dec 20 #Python
python3的UnicodeDecodeError解决方法
Dec 20 #Python
基于python调用psutil模块过程解析
Dec 20 #Python
python如何使用jt400.jar包代码实例
Dec 20 #Python
基于python使用tibco ems代码实例
Dec 20 #Python
使用python实现数组、链表、队列、栈的方法
Dec 20 #Python
python隐藏类中属性的3种实现方法
Dec 19 #Python
You might like
PHP实现的功能是显示8条基色色带
2006/10/09 PHP
模拟OICQ的实现思路和核心程序(二)
2006/10/09 PHP
解决163/sohu/sina不能够收到PHP MAIL函数发出邮件的问题
2009/03/13 PHP
基于asp+ajax和数据库驱动的二级联动菜单
2010/05/06 PHP
yii实现model添加默认值的方法(2种方法)
2016/01/06 PHP
Zend Framework教程之配置文件application.ini解析
2016/03/10 PHP
Yii框架小部件(Widgets)用法实例详解
2020/05/15 PHP
js 浮动层菜单收藏
2009/01/16 Javascript
jQuery简易图片放大特效示例代码
2014/06/09 Javascript
jquery实现两边飘浮可关闭的对联广告
2015/11/27 Javascript
JavaScript实现复制文章自动添加版权
2016/08/02 Javascript
微信小程序 图片宽高自适应详解
2017/05/11 Javascript
vue利用axios来完成数据的交互
2018/03/23 Javascript
JavaScript实现JSON合并操作示例【递归深度合并】
2018/09/07 Javascript
原生JS实现旋转轮播图+文字内容切换效果【附源码】
2018/09/29 Javascript
JavaScript实现更换背景图片
2019/10/18 Javascript
Vue项目中如何使用Axios封装http请求详解
2019/10/23 Javascript
uni-app如何实现增量更新功能
2020/01/03 Javascript
vue实现商品列表的添加删除实例讲解
2020/05/14 Javascript
vue+elementUI动态增加表单项并添加验证的代码详解
2020/12/17 Vue.js
Python 循环语句之 while,for语句详解
2018/04/23 Python
Python(TensorFlow框架)实现手写数字识别系统的方法
2018/05/29 Python
对Python2与Python3中__bool__方法的差异详解
2018/11/01 Python
深入浅析Python2.x和3.x版本的主要区别
2018/11/30 Python
对python字典过滤条件的实例详解
2019/01/22 Python
python自动化之Ansible的安装教程
2019/06/13 Python
Pycharm远程调试原理及具体配置详解
2019/08/08 Python
Python绘制股票移动均线的实例
2019/08/24 Python
Python制作词云图代码实例
2019/09/09 Python
纯css3实现鼠标经过图片显示描述的动画效果
2014/09/01 HTML / CSS
校园报刊亭创业计划书
2014/01/02 职场文书
大家访活动实施方案
2014/03/10 职场文书
学生期末评语大全
2014/04/30 职场文书
护士医德考评自我评价
2015/03/03 职场文书
教师党员个人自我评价
2015/03/04 职场文书
Python初学者必备的文件读写指南
2021/06/23 Python