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 相关文章推荐
探索Python3.4中新引入的asyncio模块
Apr 08 Python
九步学会Python装饰器
May 09 Python
详解Python的Django框架中的Cookie相关处理
Jul 22 Python
python通过getopt模块如何获取执行的命令参数详解
Dec 29 Python
Python列表倒序输出及其效率详解
Mar 04 Python
Python unittest 自动识别并执行测试用例方式
Mar 09 Python
如何表示python中的相对路径
Jul 08 Python
Python如何读写CSV文件
Aug 13 Python
Python内存泄漏和内存溢出的解决方案
Sep 26 Python
在Ubuntu中安装并配置Pycharm教程的实现方法
Jan 06 Python
VSCODE配置Markdown及Markdown基础语法详解
Jan 19 Python
Python中相见恨晚的技巧
Apr 13 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连接Oracle数据库
2006/10/09 PHP
php在多维数组中根据键名快速查询其父键以及父键值的代码
2011/05/07 PHP
php使用curl模拟登录后采集页面的例子
2013/11/04 PHP
ThinkPHP实现多数据库连接的解决方法
2014/07/01 PHP
Zend Framework 2.0事件管理器(The EventManager)入门教程
2014/08/11 PHP
php实现的数字验证码及数字运算验证码
2015/07/30 PHP
Javascript的闭包
2009/12/31 Javascript
js实现字符串的16进制编码不加密
2014/04/25 Javascript
jQuery.Highcharts.js绘制柱状图饼状图曲线图
2015/03/14 Javascript
js实现可控制左右方向的无缝滚动效果
2016/05/29 Javascript
AngularJS入门教程之表单校验用法示例
2016/11/02 Javascript
js实现自定义路由
2017/02/04 Javascript
深究AngularJS中ng-drag、ng-drop的用法
2017/06/12 Javascript
原生JS+Canvas实现五子棋游戏
2020/05/28 Javascript
js实现点击展开隐藏效果(实例代码)
2018/09/28 Javascript
浅谈JavaScript 代码整洁之道
2018/10/23 Javascript
layui 实现table翻页滚动条位置保持不变的例子
2019/09/05 Javascript
vue仿淘宝滑动验证码功能(样式模仿)
2019/12/10 Javascript
JavaScript中变量提升机制示例详解
2019/12/27 Javascript
[05:08]DOTA2-DPC中国联赛3月6日Recap集锦
2021/03/11 DOTA
Python中的浮点数原理与运算分析
2017/10/12 Python
使用DataFrame删除行和列的实例讲解
2018/04/08 Python
对numpy中向量式三目运算符详解
2018/10/31 Python
python爬虫之urllib库常用方法用法总结大全
2018/11/14 Python
Python socket非阻塞模块应用示例
2019/09/12 Python
Django如何实现密码错误报错提醒
2020/09/04 Python
安德玛菲律宾官网:Under Armour菲律宾
2020/07/28 全球购物
国际贸易专业个人求职信范文分享
2013/12/14 职场文书
《长相思》听课反思
2014/04/10 职场文书
春游踏青活动方案
2014/08/14 职场文书
车辆委托书范本
2014/10/05 职场文书
2014年员工工作总结范文
2014/11/18 职场文书
2014年组织委员工作总结
2014/12/01 职场文书
办公室主任岗位职责范本
2015/03/31 职场文书
红高粱观后感
2015/06/10 职场文书
mysql5.6主从搭建以及不同步问题详解
2021/12/04 MySQL