博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python 序列化模块
阅读量:5314 次
发布时间:2019-06-14

本文共 1670 字,大约阅读时间需要 5 分钟。

序列化模块

序列化——转向一个字符串数据类型

序列——字符串

用在数据存储以及在网络上传输的时候等

从数据类>>>字符串的过程 叫序列化

从字符串>>>数据类型的过程 叫反序列化

序列化格式

json 通用的序列化格式

json是一个在所有语言都通用的序列化格式,但是相对的它支持的数据类型就比较少了

只有很少的一部分数据类型能够通过json转化成字符串

在python中,数字int,字符串str,列表list,字典dict都是能序列化的

元组tuple也能序列化,不过它是转成列表再序列化的,反序列化后还是列表

集合set是不能进行序列化的

json的序列化方法dumps和反序列化方法loads

dumps

import jsonli = [1,2,3,'holle',[22,33],{
'k1':'v1'},(23,3)]ret = json.dumps(li)print(type(ret),ret)

<class 'str'> [1, 2, 3, "holle", [22, 33], {"k1": "v1"}, [23, 3]]

loads

import jsonli = [1,2,3,'holle',[22,33],{
'k1':'v1'},(23,3)]ret = json.dumps(li)print(type(ret),ret)ret2 = json.loads(ret)print(type(ret2),ret2)

<class 'str'> [1, 2, 3, "holle", [22, 33], {"k1": "v1"}, [23, 3]]

<class 'list'> [1, 2, 3, 'holle', [22, 33], {'k1': 'v1'}, [23, 3]]

除了这俩还有另外两个dumpload,这俩看着和上面俩只是差个s

它们的功能也是相似的,当然也有着不听之处

dump

import jsonli = {1:"a",2:'b'}f = open('file','w',encoding='utf-8')json.dump(li,f)f.close()

它的作用是在一个文件中写入序列化之后的字符串

load

import jsonli = {1:"a",2:'b'}f = open('file','w',encoding='utf-8')json.dump(li,f)f.close()f = open('file')res = json.load(f)f.close()print(type(res),res)

<class 'dict'> {'1': 'a', '2': 'b'}

对文件的读取,读取必须是用dump写入的

pickle

 所有python中的数据类型都可以转化成字符串形式

pickle序列化的内容只有python能理解

pickle反序列化必须要与序列化时相同的环境支持

pickle的用法和json的一样

不过dumps写的是bytes类型的,所以读写要加上bytes类型的转换

shelve

序列化句柄

使用句柄直接操作,非常方便

import shelvef = shelve.open('shelve_file')f['key'] = {
'int':10, 'float':9.5, 'string':'Sample data'}f.close()f1 = shelve.open('shelve_file')existing = f1['key'] f1.close()print(existing)

{'float': 9.5, 'int': 10, 'string': 'Sample data'}

直接对文件句柄操作,就可以存入数据

取出数据的时候也只需要直接用key获取即可,但是如果key不存在会报错

转载于:https://www.cnblogs.com/GrandDarkness/p/8269346.html

你可能感兴趣的文章
各种正则验证
查看>>
C#中IS和AS操作符的区别(转)
查看>>
win7远程桌面连接
查看>>
深入浅出JMS(一)——JMS简单介绍
查看>>
[PTA] 数据结构与算法题目集 6-4 链式表的按序号查找 & 6-5 链式表操作集 & 6-6 带头结点的链式表操作集...
查看>>
观察者模式(Observer)
查看>>
DPDK编译步骤
查看>>
Python基础理论 - 面向对象
查看>>
数据仓库建设—维度建模
查看>>
(转载)Ubuntu 安装GNU Scientific library(GSL)
查看>>
java Map常用方法封装
查看>>
欧几里德与扩展欧几里德算法
查看>>
python中深浅拷贝
查看>>
python中numpy.r_和numpy.c_
查看>>
MySQL关于sql_mode的修改(timestamp的默认值不正确)
查看>>
laravel如何打印orm封装的sql语句
查看>>
大道至简阅读笔记02
查看>>
如何让在panel里的子窗体随panel的大小改变而变化?(转)
查看>>
Concurrent包总结——线程安全的集合操作
查看>>
WPF简单模拟QQ登录背景动画
查看>>