在Python中:检查文件修改时间是否早于特定日期时间

时间:2011-11-24 13:51:40

标签: python datetime

我在c#中编写了这段代码,以检查文件是否过期:

 DateTime? lastTimeModified = file.getLastTimeModified();
        if (!lastTimeModified.HasValue)
        {
            //File does not exist, so it is out of date
            return true;
        }
        if (lastTimeModified.Value < DateTime.Now.AddMinutes(-synchIntervall))
        {
            return true;
        } else
        {
           return false;
        }

我如何在python中写这个?

我在python中试过这个。

statbuf = os.stat(filename)
if(statbuf.st_mtime < datetime.datetime.now() - self.synchIntervall):
    return True
 else:
    return False

我收到了以下异常

message str: unsupported operand type(s) for -: 'datetime.datetime' and 'int'   

5 个答案:

答案 0 :(得分:17)

您想使用os.path.getmtime功能(与time.time功能结合使用)。这应该给你一个想法:

>>> import os.path as path
>>> path.getmtime('next_commit.txt')
1318340964.0525577
>>> import time
>>> time.time()
1322143114.693798

答案 1 :(得分:1)

问题是你的synchIntervall不是一个日期时间对象,所以Python不能减少它。您需要使用另一个datetime对象。 像:

synchIntervall = datetime.day(2)

synchIntervall = datetime.hour(10)

或更完整的一个:

synchIntervall = datetime.datetime(year, month, day, hour=0, minute=0, second=0)

前三个是必需的。 这样,您可以使用datetime.datetime.now()值计算值中的变量。

答案 2 :(得分:1)

@ E235在接受的答案中的评论对我来说真的很好。

此处已格式化;

import os.path as path

def is_file_older_than_x_days(file, days=1): 
    file_time = path.getmtime(file) 
    # Check against 24 hours 
    if (time.time() - file_time) / 3600 > 24*days: 
        return True
    else: 
        return False

答案 3 :(得分:0)

什么是self.synchInterval()

您无法从int中减去datetime,您应该使用datetime.timedelta

答案 4 :(得分:0)

这是使用 timedelta 的通用解决方案

newRoom.php

这可以如下使用。

要检测超过 10 秒的文件:

from datetime import datetime

def is_file_older_than (file, delta): 
    cutoff = datetime.utcnow() - delta
    mtime = datetime.utcfromtimestamp(os.path.getmtime(file))
    if mtime < cutoff:
        return True
    return False

要检测超过 10 天的文件:

from datetime import timedelta

is_file_older_than(filename, timedelta(seconds=10))

如果你可以安装外部依赖,你也可以做几个月和几年:

from datetime import timedelta

is_file_older_than(filename, timedelta(days=10))