【发布时间】:2018-05-17 20:52:14
【问题描述】:
对于我的脚本,我只需要使用带有标准库的 Python 2.6。我正在尝试编写一个遍历日志目录的脚本,该目录定义的条件仅匹配具有适当时间戳的日志。我使用的时间戳来自文件名。我不想使用操作系统时间戳,因为有时文件会被复制到不同的目录以防止它们被覆盖,这会改变文件修改时间。
每 200MB 创建一个新文件。文件名上的时间戳是文件的创建时间,代表文件中最早的日志条目。
import datetime
# One event might span multiple log files.
call_start = datetime.datetime(2018, 5, 15, 5, 25, 9)
call_stop = datetime.datetime(2018, 5, 15, 5, 37, 38)
# Timestamp values of file generated from file's naming convention
t1 = datetime.datetime(2018, 5, 15, 4, 48, 16)
t2 = datetime.datetime(2018, 5, 15, 5, 3, 53)
t3 = datetime.datetime(2018, 5, 15, 5, 19, 14)
t4 = datetime.datetime(2018, 5, 15, 5, 35)
t5 = datetime.datetime(2018, 5, 15, 5, 49, 19)
file_times = [t1, t2, t3, t4, t5]
matching_times = []
for ftime in file_times:
# Logic I can't figure out
if scratches_head:
matching_times.append(ftime)
# I would expect the matching_times list to contain t3 and t4
编辑
来自comments的澄清:
t3 是在5:19:14am 创建的文件。 call_start 是我在日志中看到的第一个条目。它从5:25:09am 开始。由于t4 直到5:35:00am 才被创建,所以call_start 必须在t3 中。 call_stop 是我要查找的最后一个日志条目。我会在t4,因为t5 是在5:49:19am 创建的。
【问题讨论】:
-
为什么 t3 和 t4 会匹配?你想匹配什么?
-
对不起,我不明白逻辑。您想查找发生在
call_start和call_stop之间的时间戳吗?如果是这样,我不明白为什么t3这里有资格。见:How to determine if a timestamp is within a specific range -
无论你的规则是什么,只要写下比较就可以了。例如,
if call_start <= ftime < call_stop:会告诉你ftime是否在call_start和call_stop之间,就像2 <= n < 5会告诉你n是否在2 和5 之间。如果你想要一个封闭的范围对于半开范围,将<更改为<=。等等。 (当然,我能想到的所有合理规则都只会通过t4,但 pault 已经涵盖了这一点。) -
t3 是在上午 5:19:14 创建的文件。 call_start 是我在日志中看到的第一个条目。它从早上 5:25:09 开始。由于 t4 直到凌晨 5:35:00 才创建,所以 call_start 必须在 t3 中。 call_stop 是我要查找的最后一个日志条目。我会在 t4,因为 t5 是在上午 5:49:19 创建的。
-
好的,所以把这个逻辑变成代码:每当
file_times[i] > call_start但file_times[i-1] >= call_start,你想要file_times[i-1]?