2011-12-14 49 views
1

我已經構建了一個腳本,每天生成文件並將它們按生成日期命名。但是,我需要在1個月後刪除這些文件,並發現它有點混亂。我相信下面的內容會起作用,但是我想知道Python是否具有內置的特性,可以讓它變得更加Pythonicly和Elegance。有沒有更好的方法來刪除python中一個月前的文件?

請注意,此代碼可處理月份結束時的月份數多於下個月的文件,方法是在上個月到達本月的最後一天時刪除所有文件。

if today.month != 1: 
    if today.day == days_in_month[today.month] and days_in_month[today.month] < days_in_month[today.month - 1]: 
     for x in range(days_in_month[today.month],days_in_month[today.month-1]+1): 
      date = date(today.year,today.month-1,x) 

      fname = str(date)+".stub" 
      remove(fname) 
else: 
    date = date(today.year-1,12,x) 

    fname = str(date)+".stub" 
    remove(fname) 
+1

你不會,如果你重新分配`date`得到很遠。 – 2011-12-14 22:36:45

回答

5

看看Python的datetime模塊,它有一些類,應該簡化這個了很多。您應該能夠使用datetime.datetime.strptime()從文件名創建一個datetime.datetime對象,而使用datetime.datetime.now()的另一個對象可以創建當前時間。然後,您可以從另一箇中減去一個,得到一個datetime.timedelta對象,您可以使用該對象計算日期之間的差異。

+0

`timedelta`就是我要找的東西。謝謝! – ewok 2011-12-15 14:49:48

3

而不是看文件名來確定年齡,你可以使用創建時間。

喜歡的東西:

import os 
import datetime 

path = "/path/to/files"  

for file in os.listdir(path): 
    fullpath = os.path.join(path,file) # turns 'file1.txt' into '/path/to/file1.txt' 
    timestamp = os.stat(fullpath).st_ctime # get timestamp of file 
    createtime = datetime.datetime.fromtimestamp(timestamp) 
    now  = datetime.datetime.now() 
    delta  = now - createtime 
    if delta.days > 30: 
     os.remove(fullpath) 
相關問題