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读取mp3中ID3信息的方法
Mar 05 Python
python对excel文档去重及求和的实例
Apr 18 Python
Python实现针对json中某个关键字段进行排序操作示例
Dec 25 Python
python实现在函数中修改变量值的方法
Jul 16 Python
python调用接口的4种方式代码实例
Nov 19 Python
Pandas+Matplotlib 箱式图异常值分析示例
Dec 09 Python
pytorch 模拟关系拟合——回归实例
Jan 14 Python
Python基于QQ邮箱实现SSL发送
Apr 26 Python
Python面向对象多态实现原理及代码实例
Sep 16 Python
浅谈Selenium 控制浏览器的常用方法
Dec 04 Python
python之随机数函数的实现示例
Dec 30 Python
python装饰器代码深入讲解
Mar 01 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 网上商城促销设计实例代码
2012/02/17 PHP
Linux编译升级php的详细方法
2013/11/04 PHP
一个基于jquery的文本框记数器
2012/09/19 Javascript
js DOM 元素ID就是全局变量
2012/09/20 Javascript
用js实现in_array的方法
2013/11/05 Javascript
深入理解javascript的执行顺序
2014/04/04 Javascript
js去除输入框中所有的空格和禁止输入空格的方法
2014/06/09 Javascript
详解javascript new的运行机制
2016/01/26 Javascript
JavaScript中两个字符串的匹配
2016/06/08 Javascript
基于JavaScript实现Tab选项卡切换效果
2016/11/24 Javascript
详解webpack 多入口配置
2017/06/16 Javascript
Windows安装Node.js报错:2503、2502的解决方法
2017/10/25 Javascript
vue的常用组件操作方法应用分析
2018/04/13 Javascript
webpack项目轻松混用css module的方法
2018/06/12 Javascript
简单易扩展可控性强的Jquery转盘抽奖程序
2019/03/16 jQuery
对vuex中getters计算过滤操作详解
2019/11/06 Javascript
小程序中设置缓存过期的实现方法
2020/01/14 Javascript
Vue的Eslint配置文件eslintrc.js说明与规则介绍
2020/02/03 Javascript
vue中解决拖拽改变存在iframe的div大小时卡顿问题
2020/07/22 Javascript
python中尾递归用法实例详解
2015/04/28 Python
恢复百度云盘本地误删的文件脚本(简单方法)
2017/10/21 Python
Django1.9 加载通过ImageField上传的图片方法
2018/05/25 Python
python计算日期之间的放假日期
2018/06/05 Python
如何使用Python自动控制windows桌面
2019/07/11 Python
对Matlab中共轭、转置和共轭装置的区别说明
2020/05/11 Python
python反爬虫方法的优缺点分析
2020/11/25 Python
python实现excel公式格式化的示例代码
2020/12/23 Python
保时捷设计:Porsche Design
2019/03/30 全球购物
联想智利官方网站:Lenovo Chile
2020/06/03 全球购物
写给女生的道歉信
2014/01/14 职场文书
小学新教师培训方案
2014/02/03 职场文书
你的创业计划书怎样才能打动风投
2014/02/06 职场文书
小学毕业感言50字
2014/02/16 职场文书
小学班主任评语大全
2014/04/23 职场文书
关于运动会的广播稿
2014/09/22 职场文书
python b站视频下载的五种版本
2021/05/27 Python