python:序列化与数据持久化
数据持久化的方式有:
1.普通文件无格式写入:将数据直接写入到文件中
2.普通序列化写入:json,pickle
3.DBM方式:shelve,dbm
相关内容:
- json
- pickle
- shelve
- dbm
首发时间:2018-02-23 20:52
json:
介绍:
按照指定格式【比如格式是字典,那么文件中就是字典】将数据明文写入到文件中,类型是bytes的,比如”中文“就会变成Unicode编码
用法:
- 首先要导入模块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(文件名,打开模式)
- 写入: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序列化(数据本地存放持久性存储)和反序列化
http://blog.csdn.net/uestcyao/article/details/7874817 #读取图片并存储为矩阵 from scipy.misc import imread im = ...
- python学习总结----内置函数及数据持久化
抽象基类(了解) - 说明: - 抽象基类就是为了统一接口而存在的 - 它不能进行实例化 - 继承自抽象类的子类必须实现抽象基类的抽象方法 - 示例: from abc import ABC, abs ...
- iphone开发中数据持久化之——属性列表序列化(一)
数据持久化是应用程序开发过程中的一个基本问题,对应用程序中的数据进行持久化存储,有多重不同的形式.本系列文章将介绍在iphone开发过程中数据持久化的三种主要形式,分别是属性列表序列号.对象归档化以及 ...
- NSFileManager(沙盒文件管理)数据持久化 <序列化与反序列化>
iOS应用程序只能在为该改程序创建的文件中读取文件,不可以去其它地方访问,此区域被成为沙盒,所以所有的非代码文件都要保存在此,例如图像,图标,声音,映像,属性列表,文本文件等. 默认情况下 ...
- python中后端数据序列化不显示中文的解决方法
我们在前后端交互的时候,让序列化的数据更友好的显示,我们会用到 import json js = json.loads('{"name": "多多"}') pr ...
- python 序列化之JSON和pickle详解
JSON模块 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.它基于ECMAScript的一个子集. JSON采用完全独立于语言的文本格式,但是也使用了类 ...
- Python序列化和反序列化
Python序列化和反序列化 通过将对象序列化可以将其存储在变量或者文件中,可以保存当时对象的状态,实现其生命周期的延长.并且需要时可以再次将这个对象读取出来.Python中有几个常用模块可实现这一功 ...
- python序列化pickle/cPickle
一.pickle/Cpickle简介 Python序列化的概念很简单.内存里面有一个数据结构,你希望将它保存下来,重用,或者发送给其他人.你会怎么做?这取决于你想要怎么保存,怎么重用,发送给谁.很多游 ...
- python序列化与反序列
python序列化与反序列 在python中提供了两个模块可进行序列化.分别是pickle和json.他们两者的功能都差不多,dumps和dump都是进行序列化,而loads和load则是反序列化. ...
随机推荐
- kaili 安装中文输入法
kaili 安装中文输入法 更换为国内可用的源: vim /etc/apt/sources.list 添加以下内容: deb http://mirrors.ustc.edu.cn/kali sana ...
- ubuntu里面搭建虚拟环境过程中遇到的问题以及解决方法。
今天开始学习Django,发现要搭建虚拟环境.就按照百度上面的方法在ubuntu中输入终端命名进行配置.发现自己是按照步骤来的.却总是在最后一步启动 source .bashrc 的时候出现''com ...
- 没有安装hiredis
在redis的发行包中的deps目录中就包含hiredis的源码,手动编译安装,或者自行下载一份.地址:hiredis的地址 cd /deps/hiredis make make install 然后 ...
- mysql: [ERROR] unknown variable 'datadir=/var/lib/mysql'问题
环境: Centos7,mysql 5.7 问题: 在使用命令“mysql -u root -p”连接mysql时,报:“mysql: [ERROR] unknown variable 'datadi ...
- SqlServer 循环建表、删除表、更新表
常用于分库分表 1.批量删除 declare @outter int declare @inner int ) ) ) begin set @tablePrefix='BankPayOrder_'+c ...
- C#效率优化(3)-- 使用foreach时避免装箱
Introduction: ※本文不是在描述旧版本Unity中mono编译器导致的foreach语句额外装箱错误 博主是一名Unity 3D游戏开发者,游戏使用C#+lua开发,最近在优化C#代码时, ...
- SQL 必知必会·笔记<16>使用视图
1.视图 视图是虚拟的表.与包含数据的表不一样,视图只包含使用时动态检索数据的查询. 为什么使用视图 重用SQL 语句 简化复杂的SQL 操作.在编写查询后,可以方便地重用它而不必知道其基本查询细节 ...
- 如何在 Linux 服务器上部署多个 Tomcat
开发管理项目时多多少少会遇到服务器不够用.一个项目分成多个子项目的情况,故研究了一下如何在一台服务器部署多个 Tomcat. 具体操作: 1.在 /tomcat/ 下部署多个 tomcat. 2.修改 ...
- MySQL实验准备(一)--环境准备
MySQL实验脚本准备(一) python操纵数据库的实验环境 安装pip 1.下载脚本文件 [root@db01 .vnc]# wget https://bootstrap.pypa.io/get- ...
- S3C2440 DMA 驱动示例
将 DMA 抽象为一个字符设备,在初始化函数中调用 void *dma_alloc_writecombine(struct device *dev, size_t size, dma_addr_t * ...