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 相关文章推荐
利用Django框架中select_related和prefetch_related函数对数据库查询优化
Apr 01 Python
基于python yield机制的异步操作同步化编程模型
Mar 18 Python
详解python之简单主机批量管理工具
Jan 27 Python
对Python中9种生成新对象的方法总结
May 23 Python
Python实现的生产者、消费者问题完整实例
May 30 Python
python实现requests发送/上传多个文件的示例
Jun 04 Python
python3第三方爬虫库BeautifulSoup4安装教程
Jun 19 Python
python实现搜索文本文件内容脚本
Jun 22 Python
Python pandas DataFrame操作的实现代码
Jun 21 Python
python实时监控logstash日志代码
Apr 27 Python
用Python制作mini翻译器的实现示例
Aug 17 Python
Python中基础数据类型 set集合知识点总结
Aug 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正则替换函数preg_replace和preg_replace_callback使用总结
2014/09/22 PHP
php生成xml时添加CDATA标签的方法
2014/10/17 PHP
PHP addslashes()函数讲解
2019/02/03 PHP
详解提高使用Java反射的效率方法
2019/04/29 PHP
laravel框架的安装与路由实例分析
2019/10/11 PHP
Laravel如何实现适合Api的异常处理响应格式
2020/06/14 PHP
jquery $.ajax()取xml数据的小问题解决方法
2010/11/20 Javascript
JQuery拖拽元素改变大小尺寸实现代码
2012/12/10 Javascript
关于textarea提交的内容无法换行的解决办法
2013/04/09 Javascript
jquery.post用法之type设置问题
2014/02/24 Javascript
JavaScript中Boolean对象的属性解析
2015/10/21 Javascript
AngularJS基础 ng-csp 指令详解
2016/08/01 Javascript
javascript中this关键字详解
2016/12/12 Javascript
vue实现动态数据绑定
2017/04/28 Javascript
layui.js实现的表单验证功能示例
2017/11/15 Javascript
Vue实现回到顶部和底部动画效果
2019/07/31 Javascript
django+js+ajax实现刷新页面的方法
2017/05/22 Python
python实现随机漫步算法
2018/08/27 Python
如何使用Python实现自动化水军评论
2019/06/26 Python
Python八皇后问题解答过程详解
2019/07/29 Python
python爬虫泛滥的解决方法详解
2020/11/25 Python
巧克力领导品牌瑞士莲美国官网:Lindt Chocolate美国
2016/08/25 全球购物
奢华时尚的创新平台:Baltini
2020/10/03 全球购物
Eclipse面试题
2014/03/22 面试题
初入社会应届生求职信
2013/11/18 职场文书
初中物理教学反思
2014/01/14 职场文书
劳动工资科岗位职责范本
2014/03/02 职场文书
大学毕业感言200字
2014/03/09 职场文书
签约仪式主持词
2014/03/19 职场文书
实习评语大全
2014/04/26 职场文书
机关单位工作失职检讨书
2014/11/20 职场文书
党员个人自我评价
2015/03/03 职场文书
2019奶茶店创业计划书范本,值得你借鉴
2019/08/14 职场文书
大学生如何逃脱“毕业季创业队即散伙”魔咒?
2019/08/19 职场文书
JavaScript实现贪吃蛇游戏
2021/06/16 Javascript
python 远程执行命令的详细代码
2022/02/15 Python