用 Python 设计日志存储系统
假设我们有一些日志,每个日志包含一个唯一的 ID 和时间戳。时间戳是一个字符串,格式为:年:月:日:时:分:秒,例如 2019:01:01:23:59:59。所有域都是零填充的十进制数。
我们必须设计一个日志存储系统来实现以下功能 −
void Put(int id, string timestamp): 这将获取日志的唯一 ID 和时间戳,并将日志存储在存储系统中。
int[] Retrieve(String start, String end, String granularity): 这将返回时间戳在 start 到 end 参数范围内的日志的 ID。 granularity 参数表示要考虑的时间级别。例如,start = "2019:01:01:23:59:59"、end = "2019:01:02:23:59:59",granularity = "Day",这意味着我们需要查找 2019 年 1 月 1 日至 2019 年 1 月 2 日范围内的日志。
因此,如果输入如下
put(1, "2019:01:01:23:59:59");
put(2, "2019:01:01:22:59:59");
put(3, "2018:01:01:00:00:00");
retrieve("2018:01:01:01:01:01","2019:01:01:23:00:00","Year");
retrieve("2018:01:01:01:01:01","2019:01:01:23:00:00","Hour");
然后输出将是 [1,2,3],因为我们需要返回 2018 到 2019 范围内的所有日志和 [1,2],因为我们需要返回从2018:01:01:01 至 2019:01:01:23,其中 log 3 超出范围。
为了解决这个问题,我们将遵循以下步骤 −
定义初始化程序。
logs := 一个新列表
定义一个函数 put()。这将需要 id、timestamp
在 logs 末尾插入 id、timestamp
定义一个函数 tries()。这将需要 s、e、gra
index := 一个类似 {'Year':5, 'Month' : 8, 'Day' 的映射: 11, '小时' : 14, '分钟' : 17, '秒' :20}[gra]
start := s[从索引 0 到索引]
end := e[从索引 0 到索引]
返回(每个 tid 的 tid,如果开始 <= timestamp[从索引 0 到索引] <= end,则返回日志中的时间戳)
示例
让我们看看下面的实现以便更好地理解 −
class LogSystem(object):
def __init__(self):
self.logs = []
def put(self, id, timestamp):
self.logs.append((id, timestamp))
def retrieve(self, s, e, gra):
index = {'Year':5, 'Month' : 8, 'Day' : 11, 'Hour' : 14, 'Minute' : 17, 'Second' :20}[gra]
start = s[:index]
end = e[:index]
return (tid for tid, timestamp in self.logs if start <= timestamp[:index] <= end)
ob = LogSystem()
ob.put(1, "2019:01:01:23:59:59")
ob.put(2, "2019:01:01:22:59:59")
ob.put(3, "2018:01:01:00:00:00")
print(list(ob.retrieve("2018:01:01:01:01:01","2019:01:01:23:00:00","Year")))
print(list(ob.retrieve("2018:01:01:01:01:01","2019:01:01:23:00:00","Hour")))
输入
ob.put(1, "2019:01:01:23:59:59")
ob.put(2, "2019:01:01:22:59:59")
ob.put(3, "2018:01:01:00:00:00")
ob.retrieve("2018:01:01:01:01:01","2019:01:01:23:00:00","Year")
ob.retrieve("2018:01:01:01:01:01","2019:01:01:23:00:00","Hour")
输出
[1, 2, 3] [1, 2]
相关文章
有用资源
python 参考教程 - 该教程包含有关 python 的更多信息:https://www.cainiaomax.com/python/

