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中while循环语句用法简单实例
May 07 Python
Python中super的用法实例
May 28 Python
python关键字and和or用法实例
May 28 Python
Python面向对象编程基础解析(一)
Oct 26 Python
Python内置函数delattr的具体用法
Nov 23 Python
TensorFlow深度学习之卷积神经网络CNN
Mar 09 Python
python监测当前联网状态并连接的实例
Dec 18 Python
bluepy 一款python封装的BLE利器简单介绍
Jun 25 Python
简单了解python gevent 协程使用及作用
Jul 22 Python
解决Django删除migrations文件夹中的文件后出现的异常问题
Aug 31 Python
Python爬取新型冠状病毒“谣言”新闻进行数据分析
Feb 16 Python
Django URL参数Template反向解析
Nov 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
apache+mysql+php+ssl服务器之完全安装攻略
2006/09/05 PHP
从零开始学YII2框架(六)高级应用程序模板
2014/08/20 PHP
PHP实现获取ip地址的5种方法,以及插入用户登录日志操作示例
2019/02/28 PHP
jQuery 研究心得 取得属性的值
2007/11/30 Javascript
Javascript倒计时代码
2010/08/12 Javascript
js函数的引用, 关于内存的开销
2012/09/17 Javascript
js读写cookie实现一个底部广告浮层效果的两种方法
2013/12/29 Javascript
JavaScript中的类数组对象介绍
2014/12/30 Javascript
jQuery中:checked选择器用法实例
2015/01/04 Javascript
jQuery实现鼠标滑过链接控制图片的滑动展开与隐藏效果
2015/10/28 Javascript
解决JavaScript数字精度丢失问题的方法
2015/12/03 Javascript
Javascript实现图片轮播效果(二)图片序列节点的控制实现
2016/02/17 Javascript
JS在onclientclick里如何控制onclick的执行
2016/05/30 Javascript
js实现方块上下左右移动效果
2017/08/17 Javascript
js实现左右两侧浮动广告
2018/07/09 Javascript
详解微信小程序动画Animation执行过程
2020/09/23 Javascript
在Python的gevent框架下执行异步的Solr查询的教程
2015/04/16 Python
python登录豆瓣并发帖的方法
2015/07/08 Python
Python中Iterator迭代器的使用杂谈
2016/06/20 Python
python对象及面向对象技术详解
2016/07/19 Python
Python算法输出1-9数组形成的结果为100的所有运算式
2017/11/03 Python
Ubuntu18.04下python版本完美切换的解决方法
2019/06/14 Python
python障碍式期权定价公式
2019/07/19 Python
基于python实现把图片转换成素描
2019/11/13 Python
wxPython实现文本框基础组件
2019/11/18 Python
西班牙创意礼品和小工具网上商店:Curiosite
2016/07/26 全球购物
杭州龙健科技笔试题.net部分笔试题
2016/01/24 面试题
我的中国梦口号
2014/06/16 职场文书
九一八事变纪念日演讲稿
2014/09/14 职场文书
2014年党的群众路线学习心得体会
2014/11/05 职场文书
古诗之感恩老师
2019/10/24 职场文书
python实战之一步一步教你绘制小猪佩奇
2021/04/22 Python
python自动化之如何利用allure生成测试报告
2021/05/02 Python
java基础——多线程
2021/07/03 Java/Android
springboot 启动如何排除某些bean的注入
2021/08/02 Java/Android
Go结合Gin导出Mysql数据到Excel表格
2022/08/05 Golang