pickle、shelve,python私有,支持所有python数据类型

一、pickle

dic={'name':'egon','age':18}

print(pickle.dumps(dic))    ##得到的是一个bets类型数据

with open('d.pickle','wb') as f:      #bets类型需要用wb模式打开
f.write(pickle.dumps(dic)) #序列化 ##反序列化
with open('d.pickle','rb') as f: #bets类型需要用b模式打开
data=pickle.loads(f.read())
print(data['name'])

简单版本: 


##1、第一步
dic = {'name': 'egon', 'age': 18}
pickle.dump(dic, open('e.pickle', 'wb')) ##第二步,可以在其它py程序中实现反序列化
data = pickle.load(open('e.pickle', 'rb'))
print(data['name'])

用json来序列化函数?
def func():
print('from func') import json json.dump(open('s.json','w')) 注意报错:说,函数不是一个json可序列化的对象
用plckle来序列化函数?

def func():
print('from func') import pickle print(pickle.dumps(func)) #b'\x80\x03c__main__\nfunc\nq\x00.' :pickle可以序列化函数 pickle.dump(func,open('func.pickle','wb')) #序列化函数 ###然后去 pickle_反序列化.py文件里把函数反序列化出来

 

报错AttributeError: Can't get attribute 'func' on <module '__main__' from 
'D:/python-笔记/day5/pickle_module/pickle_反序列化.py'> 注意:序列化的时候是序列化的内存地址,没有把函数的值序列化进去,如果反序列化的时候找不到内存地址,会报错。

 

序列化类

# class Foo:
# pass
#
#
# obj1=Foo()
# obj2=Foo()
#
# #### print(obj1 is obj2) #False
# #### 需求:把两个对象保存下来
#
# pickle.dump(obj1,open('class_obj1.pickle','wb'))
# pickle.dump(obj2,open('class_obj2.pickle','wb')) #成功序列化类 问题来了,反序列化怎么做,把上面的class Foo,obj1=Foo()obj2=Foo() 全部注释掉 import pickle pickle.load(open('class_obj1.pickle','rb')) #报错,因为Foo不存在了,无法反序列化

二、shelve

1、shelve_模块从文件中取数据

import shelve

obj=shelve.open(r'sheve.shl')    #取数据的时候只需要记住文件名,打开这个文件会得到一个对象,赋值给obj
print(obj['xiechao'])
print(obj['wangyanli']) for i in obj:
print(i,obj[i]) #得出来的是字典的k,v obj.close() #最后别忘记了关闭

二、shelve_模块保存数据到文件

shelve模块是一个简单的k,v将内存数据通过文件持久化的模块,可以持久化任何pickle可支持的python数据格式

注意:shelve只支持python ,不能跨平台

import shelve

f = shelve.open(r'sheve.shl')  #可以写一个文件路径

##需要把谢超的信息永久存放下来

f['xiechao']={'age':18,'pwd':'0621'}
f['wangyanli']={'age':22,'pwd':'0621'}
f['zhujingjing']={'age':34,'pwd':'0621'}
f['jingjingzhu']={'age':44,'pwd':'0621'}
f['jingjingZH']={'age':43,'pwd':'0621'} #写完直接自动保存到文件里去了 f.close()

shelve模块比pickle模块简单,只有一个open函数,返回类似字典的对象,可读可写;key必须为字符串,而值可以是python所支持的数据类型  

import shelve

f=shelve.open(r'sheve.txt')
# f['stu1_info']={'name':'egon','age':18,'hobby':['piao','smoking','drinking']}
# f['stu2_info']={'name':'gangdan','age':53}
# f['school_info']={'website':'http://www.pypy.org','city':'beijing'} print(f['stu1_info']['hobby'])
f.close()

  

  

day6_python之pickle、shelve序列化和反序列化的更多相关文章

  1. json —— pickle 的序列化和反序列化

    前言json的序列化和反序列化 1, json 只能序列化简单的数据类型,如,列表,字典,字符串,等简单的类型,不能序列化复杂的类型. 2, json 是支持所有的语言的,多以我们跨语言的时候都是用j ...

  2. python基础学习1-json,pickle的序列化和反序列化

    import requests import json dic={'k1':'v1'} print(dic,type(dic)) result = json.dumps(dic)#调用dumps方法把 ...

  3. python:序列化与反序列化(json、pickle、shelve)

    本节内容 前言 json模块 pickle模块 shelve模块 总结 一.前言 1. 现实需求 每种编程语言都有各自的数据类型,其中面向对象的编程语言还允许开发者自定义数据类型(如:自定义类),Py ...

  4. 序列化与反序列化,json,pickle,xml,shelve,configparser模块

    序列化与反序列化 什么是序列化?序列化就是将内存中的数据结构转换成一种中间格式存储到硬盘或者基于网络传输.反序列化就是将硬盘中或者网络中传来的一种数据格式转换成内存中数据结构. 为什么要有? 1.可以 ...

  5. day5-python中的序列化与反序列化-json&pickle

    一.概述 玩过稍微大型一点的游戏的朋友都知道,很多游戏的存档功能使得我们可以方便地迅速进入上一次退出的状态(包括装备.等级.经验值等在内的一切运行时数据),那么在程序开发中也存在这样的需求:比较简单的 ...

  6. python模块--json \ pickle \ shelve \ XML模块

    一.json模块 之前学习过的eval内置方法可以将一个字符串转成一个python对象,不过eval方法时有局限性的,对于普通的数据类型,json.loads和eval都能用,但遇到特殊类型的时候,e ...

  7. 第十八天python3 序列化和反序列化

    思考: 内存中的字典.列表.集合以及各种对象,如何保存到一个文件中? 如果是自己定义的类的实例,如何保存到一个文件中? 如何从文件中读取数据,并让它们在内存中再次变成自己对应的类的实例? 要设计一套协 ...

  8. day6_python序列化之 json & pickle & shelve 模块

    一.json & pickle & shelve 模块 json,用于字符串 和 python数据类型间进行转换pickle,用于python特有的类型 和 python的数据类型间进 ...

  9. Python—序列化和反序列化模块(json、pickle和shelve)

    什么是序列化 我们把对象(或者变量)从内存中变为可存储或者可传输的过程称为序列化.在python中为pickling,在其他语言中也被称之为serialization,marshalling,flat ...

随机推荐

  1. 闲聊CSS之关于clearfix--清除浮动

    一,什么是.clearfix 你只要到Google或者Baidu随便一搜"css清除浮动",就会发现很多网站都讲到"盒子清除内部浮动时可以用到.clearfix" ...

  2. 洛谷P1979 [NOIP2013提高组Day2T3]华容道

    P1979 华容道 题目描述 [问题描述] 小 B 最近迷上了华容道,可是他总是要花很长的时间才能完成一次.于是,他想到用编程来完成华容道:给定一种局面, 华容道是否根本就无法完成,如果能完成, 最少 ...

  3. 洛谷P2381 圆圆舞蹈

    P2381 圆圆舞蹈 题目描述 熊大妈的乃修在时针的带领下,围成了一个圆圈舞蹈,由于没有严格的教育,奶牛们之间的间隔不一致. 奶牛想知道两只最远的奶牛到底隔了多远.奶牛A到B的距离为A顺时针走和逆时针 ...

  4. 如何用git将项目代码上传到github - CSDN博客

    配置Git 我们先在电脑硬盘里找一块地方存放本地仓库,比如我们把本地仓库建立在C:\MyRepository\1ke_test文件夹下 进入1ke_test文件夹 鼠标右键操作如下步骤: 1)在本地仓 ...

  5. MR25H10-1Mb密度SPI串行接口MRAM

    everspin的MR25H10是一个1,048,576位磁阻随机存取存储器(MRAM)设备,由131,072个8位字组成.MR25H10提供串行EEPROM和串行闪存兼容的读/写时序,没有写延迟,并 ...

  6. golang数组 排序和查找

    package main import "fmt" func BubbleSort(arr *[5]int){ fmt.Println("排序前arr=",(* ...

  7. 指定程序集的位置 | Microsoft Docs

    原文:指定程序集的位置 | Microsoft Docs 指定程序集的位置Specifying an Assembly's Location 2017/03/30 作者 使用<b a s e & ...

  8. 【水滴石穿】rn_antd_dva_reactnavigation

    这个项目好像就是记录了一个数据的流向,大体思想好像是这个 项目地址:https://github.com/Yangzhuren/rn_antd_dva_reactnavigation 先看效果 第一个 ...

  9. golang数据运算符

     

  10. Directx11教程40 纹理映射(10)

    原文:Directx11教程40 纹理映射(10)      本章尝试使用纹理行列式,或者说纹理数组,在ps中,使用2个纹理,最终的像素颜色,是光照颜色*纹理1采样颜色*纹理2采样颜色,主要是想达到如 ...