01. Python 工具
02. Python 基础
03. Numpy
- Numpy 简介
- Matplotlib 基础
- Numpy 数组及其索引
- 数组类型
- 数组方法
- 数组排序
- 数组形状
- 对角线
- 数组与字符串的转换
- 数组属性方法总结
- 生成数组的函数
- 矩阵
- 一般函数
- 向量化函数
- 二元运算
- ufunc 对象
- choose 函数实现条件筛选
- 数组广播机制
- 数组读写
- 结构化数组
- 记录数组
- 内存映射
- 从 Matlab 到 Numpy
04. Scipy
05. Python 进阶
- sys 模块简介
- 与操作系统进行交互:os 模块
- CSV 文件和 csv 模块
- 正则表达式和 re 模块
- datetime 模块
- SQL 数据库
- 对象关系映射
- 函数进阶:参数传递,高阶函数,lambda 匿名函数,global 变量,递归
- 迭代器
- 生成器
- with 语句和上下文管理器
- 修饰符
- 修饰符的使用
- operator, functools, itertools, toolz, fn, funcy 模块
- 作用域
- 动态编译
06. Matplotlib
- Pyplot 教程
- 使用 style 来配置 pyplot 风格
- 处理文本(基础)
- 处理文本(数学表达式)
- 图像基础
- 注释
- 标签
- figures, subplots, axes 和 ticks 对象
- 不要迷信默认设置
- 各种绘图实例
07. 使用其他语言进行扩展
- 简介
- Python 扩展模块
- Cython:Cython 基础,将源代码转换成扩展模块
- Cython:Cython 语法,调用其他C库
- Cython:class 和 cdef class,使用 C++
- Cython:Typed memoryviews
- 生成编译注释
- ctypes
08. 面向对象编程
09. Theano 基础
- Theano 简介及其安装
- Theano 基础
- Theano 在 Windows 上的配置
- Theano 符号图结构
- Theano 配置和编译模式
- Theano 条件语句
- Theano 循环:scan(详解)
- Theano 实例:线性回归
- Theano 实例:Logistic 回归
- Theano 实例:Softmax 回归
- Theano 实例:人工神经网络
- Theano 随机数流变量
- Theano 实例:更复杂的网络
- Theano 实例:卷积神经网络
- Theano tensor 模块:基础
- Theano tensor 模块:索引
- Theano tensor 模块:操作符和逐元素操作
- Theano tensor 模块:nnet 子模块
- Theano tensor 模块:conv 子模块
10. 有趣的第三方模块
11. 有用的工具
- pprint 模块:打印 Python 对象
- pickle, cPickle 模块:序列化 Python 对象
- json 模块:处理 JSON 数据
- glob 模块:文件模式匹配
- shutil 模块:高级文件操作
- gzip, zipfile, tarfile 模块:处理压缩文件
- logging 模块:记录日志
- string 模块:字符串处理
- collections 模块:更多数据结构
- requests 模块:HTTP for Human
12. Pandas
文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
pickle, cPickle 模块:序列化 Python 对象
pickle
模块实现了一种算法,可以将任意一个 Python
对象转化为一系列的字节,也可以将这些字节重构为一个有相同特征的新对象。
由于字节可以被传输或者存储,因此 pickle
事实上实现了传递或者保存 Python
对象的功能。
cPickle
使用 C
而不是 Python
实现了相同的算法,因此速度上要比 pickle
快一些。但是它不允许用户从 pickle
派生子类。如果子类对你的使用来说无关紧要,那么 cPickle
是个更好的选择。
In [1]:
try:
import cPickle as pickle
except:
import pickle
编码和解码
使用 pickle.dumps()
可以将一个对象转换为字符串(dump string
):
In [2]:
data = [ { 'a':'A', 'b':2, 'c':3.0 } ]
data_string = pickle.dumps(data)
print "DATA:"
print data
print "PICKLE:"
print data_string
DATA:
[{'a': 'A', 'c': 3.0, 'b': 2}]
PICKLE:
(lp1
(dp2
S'a'
S'A'
sS'c'
F3
sS'b'
I2
sa.
虽然 pickle
编码的字符串并不一定可读,但是我们可以用 pickle.loads()
来从这个字符串中恢复原对象中的内容(load string
):
In [3]:
data_from_string = pickle.loads(data_string)
print data_from_string
[{'a': 'A', 'c': 3.0, 'b': 2}]
编码协议
dumps
可以接受一个可省略的 protocol
参数(默认为 0),目前有 3 种编码方式:
- 0:原始的
ASCII
编码格式 - 1:二进制编码格式
- 2:更有效的二进制编码格式
当前最高级的编码可以通过 HIGHEST_PROTOCOL
查看:
In [4]:
print pickle.HIGHEST_PROTOCOL
2
例如:
In [5]:
data_string_1 = pickle.dumps(data, 1)
print "Pickle 1:", data_string_1
data_string_2 = pickle.dumps(data, 2)
print "Pickle 2:", data_string_2
Pickle 1: ]q�}q�(U�aU�AU�cG@�U�bK�ua.
Pickle 2: ��]q�}q�(U�aU�AU�cG@�U�bK�ua.
如果 protocol
参数指定为负数,那么将调用当前的最高级的编码协议进行编码:
In [6]:
print pickle.dumps(data, -1)
��]q�}q�(U�aU�AU�cG@�U�bK�ua.
从这些格式中恢复对象时,不需要指定所用的协议,pickle.load()
会自动识别:
In [7]:
print "Load 1:", pickle.loads(data_string_1)
print "Load 2:", pickle.loads(data_string_2)
Load 1: [{'a': 'A', 'c': 3.0, 'b': 2}]
Load 2: [{'a': 'A', 'c': 3.0, 'b': 2}]
存储和读取 pickle 文件
除了将对象转换为字符串这种方式,pickle
还支持将对象写入一个文件中,通常我们将这个文件命名为 xxx.pkl
,以表示它是一个 pickle
文件:
存储和读取的函数分别为:
pickle.dump(obj, file, protocol=0)
将对象序列化并存入file
文件中pickle.load(file)
从file
文件中的内容恢复对象
将对象存入文件:
In [8]:
with open("data.pkl", "wb") as f:
pickle.dump(data, f)
从文件中读取:
In [9]:
with open("data.pkl") as f:
data_from_file = pickle.load(f)
print data_from_file
[{'a': 'A', 'c': 3.0, 'b': 2}]
清理生成的文件:
In [10]:
import os
os.remove("data.pkl")
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论