我有以下代码:
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个文件。在
(做了一些编辑以便于阅读)
考虑一下Python中可用的
filter
函数。我假设您的输入是要检查的文件列表和过去的分钟数,并且您希望根据在过去和现在之间的min
分钟之间的时间段内最后修改过的文件进行筛选。在迭代列表时,您正在从列表中删除项。结果是不可预测的。在
尝试迭代列表的副本,如下所示:
相关问题 更多 >
编程相关推荐