python通过修改tim过滤文件

2024-04-20 05:50:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下代码:

def filter_by_time(files):
    print "---List of log files to timecheck: "
    for f in files:
        print f, datetime.datetime.fromtimestamp(os.path.getmtime(f))
    print "------"

    mins = datetime.timedelta(minutes=int(raw_input("Age of log files in minutes? ")))
    print "Taking ", mins, "minutes"
    mins = mins.total_seconds()
    current = time.time()
    difftime = current - mins
    print "current time: ", datetime.datetime.fromtimestamp(current)
    print "logs from after: ", datetime.datetime.fromtimestamp(difftime)   

    for f in files:    
        tLog = os.path.getmtime(f)
        print "checking ", f, datetime.datetime.fromtimestamp(tLog)
        if difftime > tLog:
            print "difftime is bigger than tLog", "removing ", f
            files.remove(f)

    print "*****List of log files after timecheck"
    for f in files:
        print f, datetime.datetime.fromtimestamp(os.path.getmtime(f)) 
    print "******"  
    return files

以及一些日志文件。 输入几分钟后,上述代码的输出是:

^{pr2}$

正如你所看到的,它收集的文件是不正确的。它所做的是检查4个文件,看看是否有任何文件在过去5分钟内被修改。它从列表中删除了2个,但应该删除了4个文件。在

(做了一些编辑以便于阅读)


Tags: 文件ofinlogfordatetimetimeos
2条回答

考虑一下Python中可用的filter函数。我假设您的输入是要检查的文件列表和过去的分钟数,并且您希望根据在过去和现在之间的min分钟之间的时间段内最后修改过的文件进行筛选。在

import datetime, os
def files_after (files, min)
    lower_time_bound = datetime.datetime.now() - timedelta(minutes=min)
    return filter(lambda f: datetime.datetime.fromtimestamp(os.path.getmtime(f)) > lower_time_bound, files)

迭代列表时,您正在从列表中删除项。结果是不可预测的。在

尝试迭代列表的副本,如下所示:

for f in files[:]:    # Note the [:] after "files"
    tLog = os.path.getmtime(f)
    print "checking ", f, datetime.datetime.fromtimestamp(tLog)
    if difftime > tLog:
        print "difftime is bigger than tLog", "removing ", f
        files.remove(f)

相关问题 更多 >