#pickling
import pickle,json
# d = dict(name='傻狗1',age=300,score=100)
# d1 = pickle.dumps(d)#pickle.dumps()方法把任意对象序列化成一个bytes,然后,就可以把这个bytes写入文件
# print(d1)#b'\x80\x03}q\x00(X\x04\x00\x00\x00nameq\x01X\x07\x00\x00\x00\xe5\x82\xbb\xe7\x8b\x971q\x02X\x03\x00\x00\x00ageq\x03M,\x01X\x05\x00\x00\x00scoreq\x04Kdu.' # with open('./dump.txt','wb') as f:
# pickle.dump(d,f)#用另一个方法pickle.dump()直接把对象序列化后写入一个file-like Object # with open('./dump.txt','rb') as f:
# d = pickle.load(f)#用pickle.load()方法从一个file-like Object中直接反序列化出对象
# print(d)#{'name': '傻狗1', 'age': 300, 'score': 100} #JSON
#python对象转JSON
# dict1 = dict(name='傻狗1',age=300,sorce=100)
# json1 = json.dumps(dict1)#dumps()方法返回一个str,内容就是标准的JSON
# print(json1)#{"name": "\u50bb\u72d71", "age": 300, "sorce": 100} # with open('./dump1.json','w') as f:#dump()方法可以直接把JSON写入一个file-like Object
# json2 = json.dump(dict1,f) #JSON转python对象
# json3 = '{"age": 20, "score": 88, "name": "Bob"}'
# dict2 = json.loads(json3)#{'age': 20, 'score': 88, 'name': 'Bob'} loads()把JSON反序列化为Python对象
# print(dict2) #with open('./dump1.json','r') as f1:
# dict3 = json.load(f1)#load()从file-like Object中读取字符串并反序列化
# print(dict3)#{'name': '傻狗1', 'age': 300, 'sorce': 100}
#由于JSON标准规定JSON编码是UTF-8,所以我们总是能正确地在Python的str与JSON的字符串之间转换 #class实例对象转JSON
class Point(object):
def __init__(self,name,age,sorce):
self.name = name
self.age = age
self.sorce = sorce
p1 = Point('傻狗2',300,100)
json4 = json.dumps(p1,ensure_ascii=False,default=lambda obj : obj.__dict__)#json.dumps 序列化时对中文默认使用的ascii编码.想输出真正的中文需要指定ensure_ascii=False
# print(p1.__dict__)#{'name': '傻狗2', 'age': 300, 'sorce': 100} class的实例都有一个__dict__属性,它就是一个dict,用来存储实例变量。也有少数例外,比如定义了__slots__的class
print(json4)#{"name": "\u50bb\u72d72", "age": 300, "sorce": 100} Point实例首先被匿名函数转换成dict,然后再被顺利序列化为JSON #JSON转class实例对象
json5 = '{"age": 20, "score": 88, "name": "Bob"}'
p2 = json.loads(json5,object_hook=lambda obj : Point(obj['name'],obj['age'],obj['score']))
print(p2)#<__main__.Point object at 0x000001AFE1A382E8> loads()方法首先转换出一个dict对象,然后,我们传入的object_hook函数负责把dict转换为Student实例

Python基础(序列化)的更多相关文章

  1. python基础 (序列化,os,sys,random,hashlib)

    1.序列化 定义: JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.简单地说,JSON 可以将 JavaScript 对象中表示的一组数据转换为字符串,然 ...

  2. Python基础-序列化(json/pickle)

    我们把对象(变量)从内存中变成可存储的过程称之为序列化,比如XML,在Python中叫pickling,在其他语言中也被称之为serialization,marshalling,flattening等 ...

  3. python 基础 序列化

    转自https://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000/00138683221577 ...

  4. 第五章:Python基础の生成器、迭代器、序列化和虚拟环境的应用

    本课主题 生成器介紹和操作实战 迭代器介紹和操作实战 序例化和反序例化 Json 和 Pickle 操作实战 字符串格式化的应用 创建虚拟环境实战 本周作业 生成器介紹和操作实战 什么是生成器,生成器 ...

  5. .Net程序员之Python基础教程学习----列表和元组 [First Day]

    一. 通用序列操作: 其实对于列表,元组 都属于序列化数据,可以通过下表来访问的.下面就来看看序列的基本操作吧. 1.1 索引: 序列中的所有元素的下标是从0开始递增的. 如果索引的长度的是N,那么所 ...

  6. Python之路,Day4 - Python基础4 (new版)

    Python之路,Day4 - Python基础4 (new版)   本节内容 迭代器&生成器 装饰器 Json & pickle 数据序列化 软件目录结构规范 作业:ATM项目开发 ...

  7. Day4 - Python基础4 迭代器、装饰器、软件开发规范

    Python之路,Day4 - Python基础4 (new版)   本节内容 迭代器&生成器 装饰器 Json & pickle 数据序列化 软件目录结构规范 作业:ATM项目开发 ...

  8. Python基础-输入输出(IO)

    Python基础-输入输出(IO) 程序会有输入和输出,输入可以从标准输入或是从一个文件读入数据,程序的输出可以以一种友好可读的方式(human-readable)打印出来,或是写进一个文件,而标准输 ...

  9. python 基础之pickle 与json 报错问题解决方案

    Python 基础之pickle与json 有没有在搞pickle与json在进行数据储存的时候老是报错,这个有些让人烦恼,在之前有一篇介绍过它们的基本用法以及在使用过长中避免一些坑,但是今天在把对象 ...

  10. Python 基础之socket编程(二)

    Python 基础之socket编程(二) 昨天只是对socket编程做了简单的介绍,只是把socket通信的框架搭建起来,要对其中的功能进行进一步的扩充,就来看看今天的料哈! 一.基于tcp的套接字 ...

随机推荐

  1. 基于预计算的全局光照(Global Illumination Based On Precomputation)

    目录 基于图像的光照(Image Based Lighting,IBL) The Split Sum Approximation 过滤环境贴图 预计算BRDF积分 预计算辐射度传输(Precomput ...

  2. 【C++ Primer Plus】编程练习答案——第5章

    1 void ch5_1() { 2 using namespace std; 3 int small, big, sum{0}; 4 cout << "enter small ...

  3. 简易集成websocket技术实现消息推送

    Websocket 简介 首先介绍下WebSocket,它是一种网络通信技术,该技术最大的特点就是,服务器端可以主动往客户端发送消息:当然,客户端也可以主动往服务器发送消息,实现两端的消息通信,属于网 ...

  4. 洛谷2900 [USACO08MAR]土地征用Land Acquisition (斜率优化+dp)

    自闭的一批....为什么斜率优化能这么自闭. 首先看到这个题的第一想法一定是按照一个维度进行排序. 那我们不妨直接按照\(h_i\)排序. 我们令\(dp[i]\)表示到了第\(i\)个矩形的答案是多 ...

  5. 洛谷3613睡觉困难综合征(LCT维护链信息(前后缀)+贪心)

    这个题目还是很好啊QWQ很有纪念意义 首先,如果在序列上且是单次询问的话,就是一个非常裸的贪心了QWQ这也是NOI当时原题的问题和数据范围 我们考虑上树的话,应该怎么做? 我的想法是,对于每一位建一个 ...

  6. 洛谷2046 NOI2010海拔

    QwQ题目太长 这里就不复制了 题目 这个题...算是个比较经典的平面图最小割变成对偶图的最短路了QwQ 首先考虑最小割应该怎么做. 有一个性质,就是每个点的海拔要么是1,要么是0 QwQ不过这个我不 ...

  7. 2.1 OOP & SOLID

    OOP & SOLID Implementing DDD highly relies on the Object Oriented Programming (OOP) and SOLID pr ...

  8. JVM:GC Roots

    JVM:GC Roots 本笔记是根据bilibili上 尚硅谷 的课程 Java大厂面试题第二季 而做的笔记 JVM 垃圾回收的时候如何确定垃圾 什么是垃圾 简单来说就是内存中已经不再被使用的空间就 ...

  9. 表单编辑时el-form的validate方法执行无效,阻塞代码运行 - Element UI踩坑记录

    今天在用element-ui写管理后台需求时,遇到一个奇怪的问题 一个正常带校验的表单,在新增列表数据时表单校验功能正常: 但是在新增之后再去编辑数据时,表单校验却失效了,甚至阻塞了后续的代码执行,控 ...

  10. lib库无法加载的情况分析

    最近升级vs2017的时候遇到无法加载库的问题,在网上查找问题,网上给出可能有三种情况导致该问题:路径是否正确:库依赖是否齐全:库版本是否正确.最直接的方法就是用depends软件去查询,是否有模块有 ...