在本章最前面我们提到过,有时需要把一个时间值保存到(硬盘上的)文件中,这样一来,即使程序没有运行,这条信息也能得到保存。如果程序结束时保存当前时间(now
),程序再次启动时就可以检查这个时间,并打印这样的一条消息:
It has been 2 days, 7 hours, 23 minutes since you last used this program.
当然,大多数程序不会这样做,不过确实有一些程序需要知道已经有多长时间空闲(没有运行),电子宠物程序就是这样一个例子。就像几年前流行的电子宠物钥匙链一样,你可能希望即使你没有使用程序,它仍然会跟踪时间。例如,如果你结束程序之后过了两天再来看你的电子宠物,它应该会非常饿!程序要知道宠物有多饿,只有一个办法,就是要知道从最后一次喂食到现在隔了多长时间。这也包括程序关闭的时间。
将时间保存到一个文件中有两种方法。可以把一个字符串直接写入文件,如下:
timeFile.write ("2012-10-24 14:23:37")
要读这个时间戳时,可以使用一些字符串方法(如 split
)将这个字符串分解为各个部分,如天、月、年以及小时、分和秒。这种做法应该是可行的。
另一种方法是使用 pickle
模块,这在第 22 章介绍过。pickle
模块允许你把任何类型的变量保存到文件中,也包括对象。由于我们要使用 datetime
对象跟踪时间,所以使用 pickle
可以很容易地把时间对象存入文件,还能很方便地读取。
下面来看一个非常简单的例子,它会打印一条消息,指出程序最后一次运行的时间。这个程序要完成下面的工作。
查找一个 pickle 文件并打开这个文件。Python 有一个
os
(操作系统 operating system 的简写)模块,可以告诉我们这个文件是否存在。这里要使用的方法名为isfile
。如果文件存在,就认为程序之前运行过,得出它最后一次运行的时间(根据 pickle 文件中的时间得出)。
然后用当前时间写一个新的 pickle 文件。
如果这是程序第一次运行,就没有 pickle 文件可以打开,所以会显示一条消息,指出我们创建了一个新的 pickle 文件。
代码清单 24-3 给出了这个程序的代码。可以试试看结果如何。
代码清单 24-3 使用
pickle
把时间保存到文件中
现在已经万事俱备,可以建立简单的电子宠物程序了,下一节就来建立这样一个程序。