【Python】[05]持久存储

 文件打开与存储

通常情况下,程序会保存所处理的数据,输出在显示屏上,或者保存在文件中。

如果需要把数据保存到文件,可以利用open()BIF来实现。默认情况下,open()使用模式r来读取文件,所以不需要专门指定r模式。要打开一个文件完成写,需要使用模式w。

(注意:使用访问模式w时,如果这个文件已经存在,则会清空他现有的内容,也就是完全清除。要追加到一个文件,需要使用访问模式a。要打开一个文件来完成读和写(不清除),需要使用w+。如果打来一个不存在的文件来完成写时,那么程序首先会为你创建这个文件,然后再打开文件进行写。)

print()BIF显示数据时会使用标准输出(通常是屏幕)。要把数据写至一个文件,需要使用file参数来指定所使用的数据文件对象。

 将sketch.txt中两个人说的话分别用两个列表存放,实现如下:

实现存储的文件内容如下:

如果在文件关闭前需要处理一个Error,那么所写的数据可能会被破坏,所以发生异常的话,这两行代码将不会被执行,所以文件可能会没有关闭。

用finally扩展try

为了保证无论发生什么粗无都必须运行某些代码时,可以向try语句的finally组增加代码,将必须执行的代码放在finally中,代码修改如下:

不论什么情况,finally中的代码总是会被执行。

但是,当试图来打开一个不存在的文件时,会直接报一个file error,然后还会报出一个“NameError:name"date"is not defined”的错。

当文件不存在时,找不到这个文件,但是finally中有一句:close文件的代码要被执行,因此要被close的文件名会被报不存在。

用with处理文件

在处理文件时,try/except/finally模式很常用,不过对文件使用with语句时,可以大大减少需要编写的代码量,因为有了with语句就不再需要包含finally组来处理文件的关闭了。

使用with语句时,上面的代码可以修改为:

不过with也可以合为一句:

要with的两个语句中间用逗号隔开,with语句最后有个冒号

对于上面出现的报错,也可以稍作处理,把报错的具体内容显示出来,对except语句稍作修改:

得到的两个新的文件:man_date和other_date,打开后会发现,里面的内容都显示在一行,这并不是想要的最终效果。

可以对之前的print_lol增加一个位置参数,来达到使每一句话显示一行的效果。这里就不细说,接下来认识一个python标准库

pickle库

python标准库pickle,可以保存和记载几乎任何python数据对象,包括列表

pickle只需导入所需的模块,然后使用dump()保存数据(写法:pickle.dump()),之后再某个时间使用load()恢复数据就可以了(写法:pickle.load())。

不过,在dump和load数据时,需要以二进制的访问模式打开这些文件,

告诉python以二进制模式打开文件的写法时这样的:

with open("date.txt","wb") as mysavedate

with open("date.txt","rb") as myrestoredate

ok,还有一个知识点是:sys.stdout是python中所谓的”标准输出“,可以从标准库的sys模块访问。

猜你喜欢

转载自www.cnblogs.com/diaomaoxiaoge/p/9958834.html