讀古今文學網 > 父與子的編程之旅:與小卡特一起學Python > 24.5 把時間保存到文件 >

24.5 把時間保存到文件

在本章最前面我們提到過,有時需要把一個時間值保存到(硬盤上的)文件中,這樣一來,即使程序沒有運行,這條信息也能得到保存。如果程序結束時保存當前時間(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 把時間保存到文件中

現在已經萬事俱備,可以建立簡單的電子寵物程序了,下一節就來建立這樣一個程序。