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中列表与元组的乘法操作示例
Feb 10 Python
python中的不可变数据类型与可变数据类型详解
Sep 16 Python
基于Python对数据shape的常见操作详解
Dec 25 Python
Python any()函数的使用方法
Oct 28 Python
python3 求约数的实例
Dec 05 Python
浅谈python元素如何去重,去重后如何保持原来元素的顺序不变
Feb 28 Python
Python定时从Mysql提取数据存入Redis的实现
May 03 Python
使用Python实现将多表分批次从数据库导出到Excel
May 15 Python
如何理解python中数字列表
May 29 Python
python中return不返回值的问题解析
Jul 22 Python
Python 发送邮件方法总结
Aug 10 Python
python爬取招聘要求等信息实例
Nov 20 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新手入门学习方法
2011/05/08 PHP
完美解决PHP中的Cannot modify header information 问题
2013/08/12 PHP
php对称加密算法示例
2014/05/07 PHP
php设计模式之单例模式实例分析
2015/02/25 PHP
Zend Framework路由器用法实例详解
2016/12/11 PHP
Ubuntu上安装yaf扩展的方法
2018/01/29 PHP
php中curl和soap方式请求服务超时问题的解决
2018/06/11 PHP
使用JQUERY Tabs插件宿主IFRAMES
2010/01/01 Javascript
制作高质量的JQuery Plugin 插件的方法
2010/04/20 Javascript
JavaScript学习总结之JS、AJAX应用
2016/01/29 Javascript
JavaScript+Html5实现按钮复制文字到剪切板功能(手机网页兼容)
2017/03/30 Javascript
js实现随机数字字母验证码
2017/06/19 Javascript
NodeJS收发GET和POST请求的示例代码
2017/08/25 NodeJs
Bootstrap 模态框多次显示后台提交多次BUG的解决方法
2017/12/26 Javascript
js原生实现移动端手指滑动轮播图效果的示例
2018/01/02 Javascript
简单易扩展可控性强的Jquery转盘抽奖程序
2019/03/16 jQuery
vue项目中使用AES实现密码加密解密(ECB和CBC两种模式)
2019/08/12 Javascript
js模拟F11页面全屏显示
2019/09/17 Javascript
Node.js HTTP服务器中的文件、图片上传的方法
2019/09/23 Javascript
Python中的文件和目录操作实现代码
2011/03/13 Python
Python使用MONGODB入门实例
2015/05/11 Python
Python中你应该知道的一些内置函数
2017/03/31 Python
教你用 Python 实现微信跳一跳(Mac+iOS版)
2018/01/04 Python
浅谈numpy库的常用基本操作方法
2018/01/09 Python
使用实现pandas读取csv文件指定的前几行
2018/04/20 Python
Python 获取div标签中的文字实例
2018/12/20 Python
Python如何读写CSV文件
2020/08/13 Python
python中altair可视化库实例用法
2021/01/26 Python
python time.strptime格式化实例详解
2021/02/03 Python
Css3实现无缝滚动防抖
2020/09/14 HTML / CSS
小学老师寄语大全
2014/04/04 职场文书
大学计划书范文800字
2014/08/14 职场文书
大型主题婚礼活动策划方案
2014/09/15 职场文书
湖南省召开党的群众路线教育实践活动总结大会报告
2014/10/21 职场文书
2014年销售工作总结
2014/12/01 职场文书
四风之害观后感
2015/06/09 职场文书