#!/usr/bin/python
# -*- coding: utf-8 -*- # 序列化: 例如把字典写进文件
info = {
'name': 'alex',
'age': 22
} f = open('test.text', 'w')
f.write(str(info)) # 把字典作为字符串写进文件
f.close() # 反序列化: 接上例, 把文件中的字符串读取并转换成字典
f = open('test.text', 'r')
data = eval(f.read())
f.close()
print(data['age']) # 用json来完成序列化
import json
info = {
'name': 'alex',
'age': 22
} f = open('test.text', 'w')
print(json.dumps(info))
f.write(json.dumps(info)) # 序列化
f.close() # 用json来完成反序列化
f = open('test.text', 'r')
data = json.loads(f.read()) # 反序列化
print(data['age']) # 序列化更复杂的应用, 不支持. json只能进行简单数据的序列化. json主要支持不同语言之间进行数据交互,所以太复杂的做不了. xml在逐渐被json取代.
def sayhi(name):
print('hello', name) info = {
'name': 'alex',
'age': 22,
'func': sayhi
} f = open('test.text', 'w')
f.write(json.dumps(info)) # 失败. json不能处理这种复杂的信息.
f.close() # 若需要处理更复杂的数据, 用pickle. pickle只有在Python里能用, 其它语言不行.
# 序列化.
import pickle
def sayhi(name):
print('hello', name) f = open('test.text', 'wb') info = {
'name': 'alex',
'age': 22,
'func': sayhi
} f.write(pickle.dumps(info)) # pickle会默认转换成二进制,所以读取方式应该是wb而不是w.
f.close() # 反序列化
import pickle
def sayhi(name):
print('hello2', name) # 反序列化一个不同的函数(名字一样, 方法体不一样),也可以. ? 如果没有序列化过, 为佳么可以反序列化? f = open('test.text', 'rb') data = pickle.loads(f.read()) # 反序列化. 这样会出错, 因为函数sayhi用完就释放了, 内存地址就不存在了. 所以这
print(data['func']('Alex'))
 # 序列化.
import pickle
def sayhi(name):
print('hello', name) info = {
'name': 'alex',
'age': 22,
'func': sayhi
} f = open('test.text', 'wb') pickle.dump(info, f) # 等同于 f.write(pickle.dumps(info))
f.close() # 反序列化
import pickle
def sayhi(name):
print('hello2', name) # 反序列化一个不同的函数(名字一样, 方法体不一样),也可以. ? 如果没有序列化过, 为佳么可以反序列化? f = open('test.text', 'rb') data = pickle.load(f) # 等同于 data = pickle.loads(f.read())
print(data['func']('Alex'))
 # 序列化. dumps两次, loads的时候会出错 . 所以最好只dumps 一次, load 一次.
import json info = {
'name': 'alex',
'age': 22
} f = open('test.text', 'w') f.write(json.dump(info, f)) # 等同于 f.write(pickle.dumps(info)) info['age'] = 21
f.write(json.dumps(info)) # 这样会存两个字典进去. 两个字典的age值不同. f.close() # 反序列化
import json f = open('test.text', 'r')
data = json.loads(f) print(data)

json & pickle 序列化的更多相关文章

  1. Python3基础(4)匿名函数、装饰器、生成器、迭代器、内置函数、json&pickle序列化、软件目录开发规范、不同目录间模块调用

    ---------------个人学习笔记--------------- ----------------本文作者吴疆-------------- ------点击此处链接至博客园原文------ 1 ...

  2. json&pickle序列化

    一.用途 我们需要将内存中的数据进行序列化,即写入文件中时,写入的类型只能是字符串或者二进制类型.但是如果我们想要将复杂一些的数据类型,如:列表.字典或者函数之类的同样进行序列化,我们就要用到 jso ...

  3. json&pickle序列化和软件开发规范

    json和pickle 用于序列化的两个模块 json   用于字符串和python数据类型间进行转换,json只支持列表,字典这样简单的数据类型 但是它不支持类,函数这样的数据类型转换 pickle ...

  4. 13、Python文件处理、os模块、json/pickle序列化模块

    一.字符编码 Python3中字符串默认为Unicode编码. str类型的数据可以编码成其他字符编码的格式,编码的结果为bytes类型. # coding:gbk x = '上' # 当程序执行时, ...

  5. Python序列化,json&pickle&shelve模块

    1. 序列化说明 序列化可将非字符串的数据类型的数据进行存档,如字典.列表甚至是函数等等 反序列化,将通过序列化保存的文件内容反序列化即可得到数据原本的样子,可直接使用 2. Python中常用的序列 ...

  6. 第五章 模块之 shtil 、 json / pickle、importlib、collections

    5.8 shtil 高级的 文件.文件夹.压缩包 处理模块 shutil.rmtree 删除目录 import shutilshutil.rmtree(path) shutil.move 重命名:移动 ...

  7. python常用模块(模块和包的解释,time模块,sys模块,random模块,os模块,json和pickle序列化模块)

    1.1模块 什么是模块: 在计算机程序的开发过程中,随着程序代码越写越多,在一个文件里代码就会越来越长,越来越不容易维护. 为了编写可维护的代码,我们把很多函数分组,分别放到不同的文件里,这样,每个文 ...

  8. python序列化: json & pickle & shelve 模块

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

  9. Python-Day4 Python基础进阶之生成器/迭代器/装饰器/Json & pickle 数据序列化

    一.生成器 通过列表生成式,我们可以直接创建一个列表.但是,受到内存限制,列表容量肯定是有限的.而且,创建一个包含100万个元素的列表,不仅占用很大的存储空间,如果我们仅仅需要访问前面几个元素,那后面 ...

随机推荐

  1. C# / VB.NET合并PDF指定页

    在前面的文章中,我们已经知道如何合并.拆分多个PDF文件,在这篇文章中的合并.拆分PDF文档主要是以方便文档管理的目的来操作文档,在文档查阅.管理及存储上很方便实用.但是我们如果想要合并多个文档中的部 ...

  2. 4 sum

    Given an array S of n integers, are there elements a, b, c, and d in S such that a + b + c + d = tar ...

  3. 前端工程师的修真秘籍(css、javascript和其它)

    以我的经验,大部分技术,熟读下列四类书籍即可. 入门,用浅显的语言和方式讲述正确的道理和方法,如head first系列 全面,巨细无遗地探讨每个细节,遇到疑难问题时往往可以在这里得到理论解答,如De ...

  4. SQLServer中PRECISION和LENGTH,还有SCALE的区别

    总是搞不清楚,每次自己测试之后又忘记.故今天记录在案 CST_NAME输入大于5个字符或两个汉字加一个字符,报错String or binary data would be truncated.The ...

  5. sublime中安装sublimecodeintel插件

    本文是基于在Windows上对sublime进行相关配置. 1.安装sublime,在官网http://www.sublimetext.com/3. 如果是在Linux系统上安装只需要输入命令直接安装 ...

  6. Angular为什么选择TypeScript?

    原文地址:https://vsavkin.com/writing-angular-2-in-typescript-1fa77c78d8e8 本文转自:http://www.chinacion.cn/a ...

  7. Django中的Python高级特性

    本小文的内容实际是作为<Pro Django>第二版第二章的读书笔记简单总结. 1.类的构建:元类,使用带元类的基类----这个特性的案例主要就是models.Model类,用这种方式高效 ...

  8. Linux 安装 MongoDB

    一.下载 Linux:CentOS 7.3 64位 MongoDB:3.6.4 安装目录:/usr/local cd /usr/local wget https://fastdl.mongodb.or ...

  9. QT中正则表达式的简单说明

    使用方法: QRegExp acNumRE("[0-9]{19}"); lineEdit->setValidator(new QRegExpValidator(acNumRE ...

  10. go redigo的简单操作

    golang操作redis主要有两个库,go-redis和redigo.两者操作都比较简单,区别上redigo更像一个client执行各种操作都是通过Do函数去做的,redis-go对函数的封装更好, ...