python 序列化操作

  对象的序列化在很多高级编程语言中都有相应的实现,Python也不例外。程序运行时,所有的变量都是在内存中,例如在程序中声明一个dict对象,里面存储着爬取的页面的链接、页面的标题、页面的摘要等信息。
  d = dict(url='index.html',title='首页',content='首页')

  在程序运行的过程中爬取的页面的链接会不断变化,比如把URL改成了second.html,但是程序一结束或意外中断,程序中的内存变量都会被操作系统进行回收。如果没有把修改过的URL存储起来,下次运行程序的时候,URL被初始化为 index.html 又是从首页开始,这是我们不愿意看到的。所以把内存中的变量变成可存储或可传输的过程,就是序列化。
  将内存中的变量序列化之后,可以把序列化后的内容写入磁盘,或者通过网络传输到别的机器上,实现程序状态的保存和共享。反过来,把变量内容从序列化的对象重新读取的内存,称为反序列化。
  在Python中提供了两个模块:cpickle和pickle来实现序列化,前者是由C语言编写的,效率比后者高很多,但是两个模块的功能是一样的。一般编写程序的时候,采取的方案是先导入cpickle模块,如果此模块不存在,在导入pickle模块。示例如下:
 

try:
    import cPickle as pickle
except ImportError:
    import pickle


  pickle实现序列化主要使用的是dumps方法或dump方法。dumps方法可以将任意对象序列化成一个str,然后可以将这个str写入文件进行保存。代码如下:

import pickle
d = dict(url='index.html',title='首页',content='首页')
print(pickle.dumps(d))

  输出结果如下:

   

   如果使用 dump 方法,可以将序列化后的对象直接写入文件中:

f=open(r'C:\Users\wyb\Desktop\python\BBtest\aa.txt','wb')
pickle.dump(d,f)
f.close()

   打开dump.txt 文件后,显示的是一段乱码:

         

   pickle 实现反序列化使用的是 loads 方法或 load 方法。把序列化后的文件从磁盘上读取为一个str,然后使用 loads 方法将这个 str 反序列化为对象,或者直接使用 load 方法将文件反序列化为对象,如下所示:

import pickle
f=open(r'C:\Users\wyb\Desktop\python\BBtest\aa.txt','rb')
d=pickle.load(f)
f.close()
print(d)

输出结果如下:

{'url': 'index.html', 'title': '首页', 'content': '首页'}

   通过反序列化,存储为文件的 dict 对象,又重新恢复出来,但是这个变量和原变量没有什么关系,只是内容一样。以上就是序列化操作的整个过程。

   假如我们想在不同的编程语言之间传递对象,把对象序列化为标准格式是关键,例如XML,但是现在更加流行的是序列化为JSON格式,既可以被所有的编程语言读取解析,也可以方便地存储到磁盘或者通过网络传输。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值