今天玩的是漂流瓶
python大大的图
这个程序的本意是说我们先打开一个叫/tmp/workfile的文件,把里面的内容读取出来,也就是读到了{'jack':'morning'}。然后我们把前面定义了字典里面的内容写进去覆盖原内容,再读这个文件里的内容,就变成了{'sam':'morning'}。这就形成了漂流瓶的效果。
但是今天下午我照着代码输入的时候变成了酱紫
python说它找不到/tmp/workfile。这就很懵逼了,发到群里一问,后来大大给的解答是文件可能被删除了,把第9,10行提到第6行后面就好了。虽然这个文件没有了,但是我先写再读还是可以读出来的
但是很显然读了两个一样的内容出来。这是写了一行读了两次。那这样就达不到漂流瓶的效果了呀。我们可以改成这样
同样的方法我们再定义一个字典,再写一次读一次就好了。(其实这个是Candice Hu同学给我的启发)
下面就开始介绍一下pickle模块。使用pickle模块你可以把Python对象直接保存到文件,而不需要把他们转化为字符串,也不用底层的文件访问操作把它们写入到一个二进制文件里。 pickle模块会创建一个python语言专用的二进制格式,你基本上不用考虑任何文件细节,它会帮你干净利落地完成读写独享操作,唯一需要的只是一个合法的文件句柄。
pickle模块中的两个主要函数是dump()和load()。dump()函数接受一个文件句柄和一个数据对象作为参数,把数据对象以特定的格式保存到给定的文件中。当我们使用load()函数从文件中取出已保存的对象时,pickle知道如何恢复这些对象到它们本来的格式。
dumps()函数执行和dump() 函数相同的序列化,但是与dump不同的dumps并不将转换后的字符串写入文件,而是将所得到的转换后的数据以字符串的形式返回。
loads()函数执行和load()函数一样的反序列化。 loads接受一个字符串参数,将字符串解码成为python的数据类型,函数loads和dumps进行的是互逆的操作。
比较狭义的可以先有这样一个认知,dump()对应的是“写”操作,而load()对应的是“读”操作。