网站开发 用什么框架,凡客诚品app下载,欧美在路边给了钱就可以做网站,wordpress mywiki串行化主要用于网络传输或者持久化。我们知道#xff0c;网络上的数据都是字节流#xff0c;如果希望将某个对象传送给远端的机器#xff0c;首先就必须将其转换成字节流#xff0c;然后才可以在网络上传输。文件也是字节流#xff0c;如果希望将某个对象保存到文件中网络上的数据都是字节流如果希望将某个对象传送给远端的机器首先就必须将其转换成字节流然后才可以在网络上传输。文件也是字节流如果希望将某个对象保存到文件中首先也是需要将其转换成字节流然后才可以保存。与串行化对应的是反串行化即从字节流中恢复出原来的对象。这样传输才有意义。基本流程将串行化和反串行化与网络传输合并起来便可以得到如图 1 所示的描述过程。图 1 串行化和反串行化如果是通过文件永久保存或备份数据则可以使用图6-2来表示该过程。图 2 对象保存的过程可以看出串行化在这两个领域是非常有用的。串行化的基本要求即是恢复的对象要等价于原来的对象不能有信息丢失现象。pickle用法串行化相关的模块很多如 pickle、cpickle、json 和 marshal 等它们都在转换效率和压缩效率上下了不少功夫但其基本功能大同小异。所以本教程并不会将这些模块都进行详细介绍主要介绍 pickle 库的用法。pickle 不用安装其是 Python 自带的包使用时仅需要引入该包即可。方法如下import picklepickle 包主要提供了两个功能一个是将对象转换成字节流即串行化另一个是将字节流转换成对象即反串行化。每个功能又分出了两个分支一个是仅转换成字节流另一个是转换成字节流并保存到文件中去。所以 pickle 包主要有 4 个接口如表 3 所示。表 3 pickle包的主要接口串行化操 作串行化反串行化转换文件操作dump()load()转换dumps()loads()1) dump(对象文件对象)串行化并保存到文件dump 的文件对象要求是可写的。 a range(10) a[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] fd open(tmp,bin, wb) fd pickle.dump(a, fd) fd.close() fd2 open(tmp,bin, rb) a2 pickle.load(fd2) a2[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]2) load(文件对象)从文件读数据并恢复出对象load 函数从文件对象中读出一个对象返回值就是该对象。上面的例子中演示了如何使用该接口函数。3) dumps(对象)仅串行化dumps 函数返回一个字节流。 a range(10) a[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] s pickle.dumps(a) s(lp0\nI0\naI1\naI2\naI3\naI4\naI5\naI6\naI7\naI8\naI9\na. type(s) b pickle.loads(s) b[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]4) loads(字节流)从字节流中恢复出对象输入应该是 dumps() 的返回值。注意不要随意构造字节流因为并不是所有的字节流都能被解析出来。该接口函数的用法在上面的例子中已经演示过了。另外可不可以将多个对象保存到一个文件中呢答案是可以。如果需要写入多个对象则可以多次调用 dump() 函数。同样在恢复时也要多次调用 load() 函数。它们之间的对应关系是第一次 load() 得到的对象是第一次 dump() 对应的对象第二次 load() 得到的对象是第二次 dump() 对应的对象简单来说就是先进先出。下面的代码演示了这个用法。 a1 range(3) a1[0, 1, 2] a2 range(5) a2[0, 1, 2, 3, 4] fd open(tmp,bin, wb) pickle.dump(a1, fd) # 先写入短的列表 pickle.dump(a2, fd) # 再写入长的列表 fd.close() fd2 open(tmp,bin, rb) b1 pickle.load(fd2) b1 # 先读出来的是短的列表[0, 1, 2] b2 pickle.load(fd2) b2 # 再读出来的是长的列表[0, 1, 2, 3, 4] fd2.close()