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+Wordpress制作小说站
Apr 14 Python
详解Python实现多进程异步事件驱动引擎
Aug 25 Python
python中for用来遍历range函数的方法
Jun 08 Python
python3判断url链接是否为404的方法
Aug 10 Python
Python对excel文档的操作方法详解
Dec 10 Python
PyCharm+Qt Designer+PyUIC安装配置教程详解
Jun 13 Python
浅谈Tensorflow加载Vgg预训练模型的几个注意事项
May 26 Python
python 如何调用 dubbo 接口
Sep 24 Python
matplotlib部件之矩形选区(RectangleSelector)的实现
Feb 01 Python
Python实现曲线拟合的最小二乘法
Feb 19 Python
Jupyter Notebook 如何修改字体和大小以及更改字体样式
Jun 03 Python
Python爬取用户观影数据并分析用户与电影之间的隐藏信息!
Jun 29 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 程序员应该使用的10个组件
2009/10/31 PHP
PHP设计模式之模板模式定义与用法详解
2018/12/20 PHP
JS onkeypress兼容性写法详解
2016/04/27 Javascript
不同js异步函数同步的实现方法
2016/05/28 Javascript
window.close(); 关闭浏览器窗口js代码的总结介绍
2016/07/14 Javascript
微信开发之调起摄像头、本地展示图片、上传下载图片实例
2016/12/08 Javascript
浅谈js script标签中的预解析
2016/12/30 Javascript
深入理解js中的加载事件
2017/02/08 Javascript
详解angularJs指令的3种绑定策略
2017/04/13 Javascript
vue如何获取点击事件源的方法
2017/08/10 Javascript
jQuery动态添加.active 实现导航效果代码思路详解
2017/08/29 jQuery
JS实现定时任务每隔N秒请求后台setInterval定时和ajax请求问题
2017/10/15 Javascript
VUE DOM加载后执行自定义事件的方法
2018/09/07 Javascript
JS实现根据数组对象的某一属性排序操作示例
2019/01/14 Javascript
前端vue+elementUI如何实现记住密码功能
2020/09/20 Javascript
举例详解Python中yield生成器的用法
2015/08/05 Python
Python开发之快速搭建自动回复微信公众号功能
2016/04/22 Python
Python中的字符串操作和编码Unicode详解
2017/01/18 Python
Python 数据结构之队列的实现
2017/01/22 Python
Python生成任意范围任意精度的随机数方法
2018/04/09 Python
Python requests库用法实例详解
2018/08/14 Python
简单分析python的类变量、实例变量
2019/08/23 Python
pycharm设置python文件模板信息过程图解
2020/03/10 Python
HTML5实现简单图片上传所遇到的问题及解决办法
2016/01/20 HTML / CSS
浅析HTML5 Landmark
2020/09/11 HTML / CSS
Daniel Wellington官方海外旗舰店:丹尼尔惠灵顿DW手表
2018/02/22 全球购物
销售演讲稿范文
2014/01/08 职场文书
校园安全教育广播稿
2014/02/17 职场文书
房产委托公证书样本
2014/04/04 职场文书
水利专业大学生职业生涯规划书范文
2014/09/17 职场文书
运动会铅球比赛加油稿
2014/09/26 职场文书
2014小学语文教师个人工作总结
2014/12/03 职场文书
2015年精神文明建设工作总结
2015/04/21 职场文书
2015教师年度思想工作总结
2015/04/30 职场文书
大学生青年志愿者活动总结
2015/05/06 职场文书
色戒观后感
2015/06/12 职场文书