在本章最前面我們提到過,有時需要把一個時間值保存到(硬盤上的)文件中,這樣一來,即使程序沒有運行,這條信息也能得到保存。如果程序結束時保存當前時間(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
把時間保存到文件中
現在已經萬事俱備,可以建立簡單的電子寵物程序了,下一節就來建立這樣一個程序。