序列化

定义:程序运行时所有变量都存在内存中,把变量从内存中变成可存储或可传输的过程称为序列化pickling,在其他语言中称为serialization,marshalling,flattening等等,都是一个意思。

作用:序列化后可把序列化的内容存到磁盘,或者通过网络传输到其他机器上。

实现方式:cPickle和pickle,前者是c语言写的速度更快。

#用pickle.dumps()把任意对象序列化成一个str

try:

import cPickle as pickle

except ImportError:

import pickle

>>> d = dict(name='Bob', age=20, score=88)

>>> pickle.dumps(d)

"(dp0\nS'age'\np1\nI20\nsS'score'\np2\nI88\nsS'name'\np3\nS'Bob'\np4\ns."

#用pickle.dump(d,f)d = dict(name ='Bob',age=23, score=90)

f = open('py.txt','wb’)#在当前目录下新建了一个py.txt文件并将用wb方式处理文件

pickle.dump(d,f)

f.close()

反序列化unplickling:把序列化之后的内容重新读入内存中。

#如果是用一个str保存之前序列化后的内容,则用pickle.loads(str)得到反序列化后的内容:

d = dict(name='Bob',age=20,score = 90)

pd = pickle.dumps(d)

upd = pickle.loads(pd)

print upd

#如果用的是文件保存序列化后的内容,用pickle.load()反序列化

f =open('py.txt','rb')

d = pickle.load(f)

f.close()

print d

注意:pickle后的结果只能用于python且与py的版本有关,否则不兼容。所以pickle只能用到不重要的内容上。

JSON

定义:序列化的一种标准格式。python也内置了json模块。

作用:如果我们要在不同的编程语言之间传递对象,就必须把对象序列化为标准格式,比如XML,但更好的方法是序列化为JSON,因为JSON表示出来就是一个字符串,可以被所有语言读取,也可以方便地存储到磁盘或者通过网络传输。

#用json.dumps()把python对象序列化为json格式的str

import json

d = dict(name='Jane',age=23,score=90)

js = json.dumps(d)

print js

#用json.dump()把python对象标准序列化到指定文件

d = dict(name='Jane',age=23,score=90)

f = open('py.txt','wb')

json.dump(d,f)

f.close()

#用json.loads()和json.load()将json格式的内容反序列化

>>> json_str = '{"age": 20, "score": 88, "name": "Bob"}'

>>> json.loads(json_str)

u'age'20u'score'88u'name'u'Bob’格式默认utf-8编码

将类序列化为json与反序列化

#将定义一个dict的类序列化为json格式的str

import json

class Student(object):

def __init__(self,name,age,score):

self.name = name

self.age = age

self.score = score

s = Student('Jane',20,90)

def class2dict(inst):

return {

'name':inst.name,

'age':inst.age,

'score':inst.score

}

sjson = json.dumps(s,default=class2dict)#这时s先化为dict再被序列化为json

print sjson

#更简洁通用地让类实例序列化为dict

json.dumps(t,default=lambda obj:obj.__dict__)

#使用lambda时直接用一个语句定义函数+得到返回值

#每个类都有一个__dict__方法,用来储存各实例变量,除了一些定义了__slots__的class

#将json格式的类的实例反序列化为dict

import json

class Stu(object):

def __init__(self,name,age,score):

self.name = name

self.age=age

self.score=score

def dict2inst(i):

return Stu(i['name'],i['age'],i['score'])

json_dict = '{"score":90,"age":20,"name":"Jane"}'

print json.loads(json_dict,object_hook=dict2inst)

#先将dict转化为实例,再反序列化

廖雪峰Python学习笔记——序列化的更多相关文章

  1. 廖雪峰Python学习笔记——类和实例

    Class MyList(list): __metaclass__ = ListMetaclass #它表示在创建MyList这个类时,必须通过 ListMetaclass这个元类的LIstMetac ...

  2. 廖雪峰Python学习笔记——使用元类

    元类(MetaClasses) 元类提供了一个改变Python类行为的有效方式. 元类的定义是“一个类的类”.任何实例是它自己的类都是元类. class demo(object): pass obj ...

  3. python学习笔记 序列化

    在程序运行的过程中,所有的变量都是在内存中,比如,定义一个dict: d = dict(name='Bob', age=20, score=88) 可以随时修改变量,比如把name改成'Bill',但 ...

  4. 廖雪峰 JavaScript 学习笔记(字符串、数组和对象)

    字符串 1.和python一样,也是用' '或" "括起来的字符表示.但多行字符串是用反引号(esc下键)``,与之相对的是Python用''' '''三引号表示: 2.转义字符: ...

  5. 廖大大python学习笔记1

    列表classmates = ['Michael', 'Bob', 'Tracy']classmates.append('tom')print classmates# classmates.inser ...

  6. 《Git教程-廖雪峰》学习笔记

    一.创建版本库 ①初始化一个Git仓库:git init ②添加文件到Git仓库:1.git add<file> ;  2.git commit 二.时光机穿梭 ①查看工作区状态,文件是否 ...

  7. 廖雪峰 JavaScript 学习笔记(函数)

    JavaScript中,定义函数的方式如下: function abs(x) { if (x >= 0) { return x; } else { return -x; } } 上述abs()函 ...

  8. 廖雪峰 JavaScript 学习笔记(判断、循环)

    条件判断  固定格式:if () { ... } else { ... } ,else可选 1.多行条件判断,通常把else if连写在一起,来增加可读性 例子: var age = 3; if (a ...

  9. 廖雪峰JavaScript学习笔记(基础及数据类型、变量)

    先睹为快 alert('我要学JavaScript!'); Run: 基本语法: 1.每个语句以;结束,不强制 2.语句块用{...} 3.//单行注释,/*...*/ 多行注释 数据类型: 1.不区 ...

随机推荐

  1. maven的下载

    1.maven的下载地址:http://maven.apache.org/download.cgi.下载3.3.9版本(在选择下载的版本是要与JDK契合). 2.下载之后,解压的文件放的位置尽量不要有 ...

  2. 从输入url到显示网页发生了什么

    原文链接:https://juejin.im/post/5bf23afa6fb9a049be5d1494 在浏览器中输入url到显示网页主要包含两个部分: 网络通信和页面渲染 互联网内各网络设备间的通 ...

  3. HHvm建站环境搭建方法:Nginx,Mariadb,hhvm及lnmp/lamp安装部署

    HHVM起源于Facebook公司,是一个开源的PHP虚拟机,使用JIT的编译方式以及其他技术,让PHP代码的执行性能大幅提升.HHVM提升PHP性能的途径,采用的方式就是替代Zend引擎来生成和执行 ...

  4. php调java接口

    1.下载二进制的 JavaBridge.jar包.java/Java.inc库文件,下载地址:http://php-java-bridge.sourceforge.net/pjb/download.p ...

  5. vue.js项目打包上线

    最近一直坚持每个月写一个小的vue.js 开发的项目,最后开发完成后想到很久之前给别人回答的一个问题:vue的项目如何上线,当时有千奇百怪的回答,我在想,这些人都是肿了么,vue的官方都说了,这个框架 ...

  6. windows 安装配置jdk7

    1.安装jdk这里不在介绍 2.配置新建用户变量:JAVA_HOME 值为(就是你自己jdk的安装路径):C:\Program Files\Java\jdk1.7.0_75\ 3.配置系统变量:Pat ...

  7. for() 和$.each()的用法区别

    一.对于数组 var arr=['姚明','易建联','张继科']; $.each(arr,function(index,value){ document.write(index+"=&qu ...

  8. Quartus调用MOdelsim仿真过程

    quarutsii调用modelsim实际是相对比较简单的.因为不需要选择要编译的库. 调用前的设置:设置调用的工具,也就是下面的Tool name,选择仿真语言,在这里选择为Verilog HDL, ...

  9. 01-html和head介绍

    一.web标准 web准备介绍: w3c:万维网联盟组织,用来制定web标准的机构(组织) web标准:制作网页遵循的规范 web准备规范的分类:结构标准.表现标准.行为标准. 结构:html.表示: ...

  10. day11(多线程,唤醒机制,生产消费者模式,多线程的生命周期)

    A:进程: 进程指正在运行的程序.确切的来说,当一个程序进入内存运行,即变成一个进程,进程是处于运行过程中的程序,并且具有一定独立功能. B:线程: 线程是进程中的一个执行单元,负责当前进程中程序的执 ...