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 相关文章推荐
在Linux下调试Python代码的各种方法
Apr 17 Python
python实现向ppt文件里插入新幻灯片页面的方法
Apr 28 Python
听歌识曲--用python实现一个音乐检索器的功能
Nov 15 Python
Python实现将照片变成卡通图片的方法【基于opencv】
Jan 17 Python
numpy 进行数组拼接,分别在行和列上合并的实例
May 08 Python
python实现多层感知器MLP(基于双月数据集)
Jan 18 Python
使用python serial 获取所有的串口名称的实例
Jul 02 Python
Django实现文件上传下载
Oct 06 Python
vim自动补全插件YouCompleteMe(YCM)安装过程解析
Oct 21 Python
PyTorch的自适应池化Adaptive Pooling实例
Jan 03 Python
python可迭代对象去重实例
May 15 Python
python调用私有属性的方法总结
Jul 24 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学习之PHP运算符
2006/10/09 PHP
中篇:安装及配置PHP
2006/12/13 PHP
CI框架中cookie的操作方法分析
2014/12/12 PHP
XENON基于JSON变种
2010/07/27 Javascript
10个基于Jquery的幻灯片插件教程
2010/10/29 Javascript
JS文本框追加多个下拉框的值的简单实例
2013/07/12 Javascript
html+javascript实现可拖动可提交的弹出层对话框效果
2013/08/05 Javascript
处理文本部分内容的TextRange对象应用实例
2014/07/29 Javascript
Node.js操作mysql数据库增删改查
2016/03/30 Javascript
prototype.js常用函数详解
2016/06/18 Javascript
jQuery事件处理的特征(事件命名机制)
2016/08/23 Javascript
JavaScript中 this 指向问题深度解析
2017/02/21 Javascript
jquery+ajax实现省市区三级联动 (封装和不封装两种方式)
2017/05/15 jQuery
获取url中用&隔开的参数实例(分享)
2017/05/28 Javascript
使用selenium抓取淘宝的商品信息实例
2018/02/06 Javascript
JS实现的倒计时恢复按钮点击功能【可用于协议阅读倒计时】
2018/04/19 Javascript
vue 标签属性数据绑定和拼接的实现方法
2018/05/17 Javascript
Vue 路由切换时页面内容没有重新加载的解决方法
2018/09/01 Javascript
解决layer弹出层的内容页点击按钮跳转到新的页面问题
2019/09/14 Javascript
vue 中几种传值方法(3种)
2019/11/12 Javascript
深入浅析JavaScript中的in关键字和for-in循环
2020/04/20 Javascript
python 获取et和excel的版本号
2009/04/09 Python
Python实现快速排序算法及去重的快速排序的简单示例
2016/06/26 Python
解决python 输出是省略号的问题
2018/04/19 Python
使用python的pyplot绘制函数实例
2020/02/13 Python
多重CSS背景动画实现方法示例
2014/04/04 HTML / CSS
公司晚会主持词
2014/03/22 职场文书
会计学专业自荐信
2014/06/25 职场文书
乡镇综治宣传月活动总结
2014/07/02 职场文书
化工实习心得体会
2014/09/09 职场文书
业绩倒数第一的检讨书
2014/09/24 职场文书
乔迁之喜答谢词
2015/01/05 职场文书
2015年五四青年节演讲稿
2015/03/18 职场文书
2015年学校后勤工作总结
2015/04/08 职场文书
鲁滨孙漂流记读书笔记
2015/06/30 职场文书
2016元旦晚会主持人开场白和结束语
2015/12/03 职场文书