9.1.4 什么样数据类型可以打包和解包
来源:互联网 发布:面试淘宝运营技巧 编辑:程序博客网 时间:2024/06/06 08:33
下面的数据类型可以用来打包:
l None,True,False
l 整数、浮点数、复数
l 字符串、bytes、bytearrays
l 元组、列表、集合和字典等,不过要求这些容器只能包含可以被打包的类型对象。
l 在模块顶层定义的函数,主要使用def定义的函数,非lambda定义。
l 模块顶层定义的内置函数
l 模块顶层定义的类
l 有支持__dict__和___getstate__()可打包的实例。
例子:
#python 3.4
import pickle
# 保存支持数据类型的对象
data = {
'a': [1, 2.0, 3, 4+6j],
'b': ("character string", b"byte string"),
'c': set([None, True, False])
}
with open('data.pickle', 'wb') as f:
# 使用最高协议版本来打包字典数据
pickle.dump(data, f, pickle.HIGHEST_PROTOCOL)
data = None
with open('data.pickle', 'rb') as f:
# 自动检查协议的版本号,不需要指定
data = pickle.load(f)
print(data)
结果输出如下:
{'b': ('character string', b'byte string'), 'a': [1, 2.0, 3, (4+6j)], 'c': {None, True, False}}
9.2 copyreg--注册pickle打包时调用的函数
本模块主要提供了一种方法:当pickle打包某些对象时,可以调用指定的函数。同时在使用模块copy拷贝时也起作用。
copyreg.constructor(object)
声明一个对象作为有效的构造函数调用,如果不是可调用的对象,就会抛出异常TypeError。
copyreg.pickle(type, function, constructor=None)
声明一个函数作为一个类型对象的构造函数。参数type是类型对象;参数function是将要被声明为构造函数。
例子:
#python 3.4
import copyreg, copy, pickle
class C(object):
def __init__(self, a):
self.a = a
def pickle_c(c):
print("打包C instance...")
return C, (c.a,)
copyreg.pickle(C, pickle_c)
c = C(1)
d = copy.copy(c)
p = pickle.dumps(c)
结果输出如下:
打包C instance...
打包C instance...
9.3 shelve--Python对象按字典方式保存到文件
本模块主要提供了一种按字典的方法来保存Python对象到文件。与数据库dbm相比,模块shelve的键值字段可以保存Python任何可以打包的对象,而数据库dbm不可以。
shelve.open(filename, flag='c', protocol=None, writeback=False)
打一个保存字典对象方式储存的文件,返回字典对象。参数filename是要保存或打开的文件名称;参数flag与dbm.open()函数里的参数一样;参数protocol是pickle协议的版本;参数writeback是指定是否缓存在内存,如果设置为True则缓存在内存里。
Shelf.sync()
如果打开文件时选择参数writeback为True时,调用本函数就会把缓存在内存里的数据写入文件。
Shelf.close()
把缓存里的数据同步到文件,同时把文件关闭。如果出错会抛出异常ValueError。
例子:
#python 3.4
import shelve
d = shelve.open('data.txt')
d['a1'] = 'http://blog.csdn.net/caimouse'
d['a2'] = '大坡3D软件开发'
d.close()
f = shelve.open('data.txt')
print(f['a2'])
f.close()
结果输出如下:
大坡3D软件开发
蔡军生 QQ:9073204 深圳
- 9.1.4 什么样数据类型可以打包和解包
- Linux 打包和解包
- 目录的打包和解包
- linux 下打包和解包
- cpio文件打包和解包
- rtp h264打包和解包
- ATL里数组的打包和解包
- java的自动打包和解包
- Linux tar打包和解包命令
- 机器学习---权重参数打包和解包
- Linux--打包、压缩和解包、解压缩命令小结
- linux下对文件文件夹进行打包和解包
- 容器 Map接口 自动的打包和解包
- 打包和解包汇总:gz、bz2、xz、zip
- 文件的打包和解包(简单的无加密)
- 文件打包和解压缩
- 文件打包和解压缩
- java jar包打包命令---可以执行
- 快速掌握Lua 5.3 —— 编写提供给Lua使用的C库函数的技巧 (2)
- 《八声甘州》--武汉
- 贪心算法作业之磁带最优存储问题与磁盘文件最优存储问题
- 面试题06:在二元树中找出和为某一值的所有路径(未完待续)
- MySQL索引原理
- 9.1.4 什么样数据类型可以打包和解包
- 博客搬家 -- 将博客从CSDN迁移到hexo上
- (LeetCode 101) Symmetric Tree
- CommandInvokationFailure: Failed to re-package resources. See the Console for details.
- java访问修饰符
- leetcode——链表reorder
- CMake 调用 Shell 脚本
- activity间传递数据
- 1001 and 1002 of search