- 1、本文档共23页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Cpickle文件序列化
窗体顶端
窗体底端
您在这里: 主页 ? 深入Python 3 ?
难度等级: ?????
序列化Python对象
? Every Saturday since we’ve lived in this apartment, I have awakened at 6:15, poured myself a bowl of cereal, addeda quarter-cup of 2% milk, sat on this end of this couch, turned on BBC America, and watched Doctor Who. ?— Sheldon, The Big Bang Theory
? 显示目录
深入#
序列化的概念很简单。内存里面有一个数据结构,你希望将它保存下来,重用,或者发送给其他人。你会怎么做?嗯, 这取决于你想要怎么保存,怎么重用,发送给谁。很多游戏允许你在退出的时候保存进度,然后你再次启动的时候回到上次退出的地方。(实际上, 很多非游戏程序也会这么干。) 在这个情况下, 一个捕获了当前进度的数据结构需要在你退出的时候保存到磁盘上,接着在你重新启动的时候从磁盘上加载进来。这个数据只会被创建它的程序使用,不会发送到网络上,也不会被其它程序读取。因此,互操作的问题被限制在保证新版本的程序能够读取以前版本的程序创建的数据。
在这种情况下,pickle 模块是理想的。它是Python标准库的一部分, 所以它总是可用的。它很快; 它的大部分同Python解释器本身一样是用C写的。 它可以存储任意复杂的Python数据结构。
什么东西能用pickle模块存储?
所有Python支持的 原生类型 : 布尔, 整数, 浮点数, 复数, 字符串, bytes(字节串)对象, 字节数组, 以及 None.
由任何原生类型组成的列表,元组,字典和集合。
由任何原生类型组成的列表,元组,字典和集合组成的列表,元组,字典和集合(可以一直嵌套下去,直至Python支持的最大递归层数).
函数,类,和类的实例(带警告)。
如果这还不够用,pickle模块也是可扩展的。如果你对可扩展性有兴趣,请查看本章最后的进一步阅读小节中的链接。
本章例子的快速笔记#
本章会使用两个Python Shell来讲故事。本章的例子都是一个单独的故事的一部分。当我演示pickle 和 json 模块时,你会被要求在两个Python Shell中来回切换。
为了让事情简单一点,打开Python Shell 并定义下面的变量:
shell= 1
保持该窗口打开。 现在打开另一个Python Shell 并定义下面下面的变量:
shell= 2
贯穿整个章节, 在每个例子中我会使用shell变量来标识使用的是哪个Python Shell。
?
保存数据到 Pickle 文件#
pickle模块的工作对象是数据结构。让我们来创建一个:
跳过该代码清单
[隐藏] [在新窗口中打开]
shell ①1entry= {} ②entry[title] = Dive into history, 2009 editionentry[article_link] = /archives/2009/03/27/dive-into-history-2009-editionentry[comments_link] = Noneentry[internal_id] = b\xDE\xD5\xB4\xF8entry[tags] = (diveintopython, docbook, html)entry[published] = Trueimport timeentry[published_date] = time.strptime(Fri Mar 27 22:20:42 2009) ③entry[published_date]time.struct_time(tm_year=2009, tm_mon=3, tm_mday=27, tm_hour=22, tm_min=20, tm_sec=42, tm_wday=4, tm_yday=86, tm_isdst=-1)
① 在Python Shell #1 里面。 ② 想法是建立一个Python字典来表示一些有用的东西,比如一个Atom 供稿的entry。但是为了炫耀一下pickle模块我也想保证里面包含了多种不同的数据类型。不需要太关心这些值。 ③ time模块包含一个表示时间点(精确到1毫秒)的数据结构(time_struct)以及操作时间结构的函数。strptime()函数接受一个格式化过的字符串并将其转化成一个time_struct。这个字符串使用的是默认格式,但你可以通过格式化代码来控制它。查看ti
文档评论(0)