2011-12-14 68 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) 
相关问题