我的输入是一个包含6,000个时间戳的纯文本文件,如下所示
2011-06-21 13:17:05,905
2011-06-21 13:17:11,371
2011-06-21 13:17:16,380
2011-06-21 13:17:20,074
2011-06-21 13:17:20,174
2011-06-21 13:17:24,749
2011-06-21 13:17:27,210
2011-06-21 13:17:27,354
2011-06-21 13:17:29,231
2011-06-21 13:17:29,965
2011-06-21 13:17:32,100
2011-06-21 13:17:32,250
2011-06-21 13:17:45,482
2011-06-21 13:17:51,998
2011-06-21 13:18:03,037
2011-06-21 13:18:04,504
2011-06-21 13:18:10,019
2011-06-21 13:18:27,434
2011-06-21 13:18:29,960
2011-06-21 13:18:30,525
...
我的输出应该是一个CSV文件,计算从“整个小时”开始每5分钟插槽之间找到多少行
示例输出:
From, To, Count
13:00:00, 13:04:59, 0
13:05:00, 13:09:59, 0
13:10:00, 13:14:59, 19
13:15:00, 13:19:59, 24
...
谢谢!
答案 0 :(得分:3)
这是未经测试的,您必须自己实施时间转换功能。您必须在时间模块中查找执行所需操作的功能。 convert_time_string_to_unix_time应该将时间字符串转换为自1970年1月1日以来相应的毫秒数(标准Unix时间戳)。
它的作用基本上是将时间划分为五分钟的时隙,循环遍历所有时间戳,并为每个找到的时间戳增加该时间戳插槽的时间戳数量。然后它只迭代所有找到的插槽并将它们转换回时间戳,并打印为该插槽找到的时间戳数。
SLOT_LENGTH = 1000 * 60 *5
for line in file:
slot = convert_time_string_to_unix_time(line) / SLOT_LENGTH
bucket[slot] = bucket.get(slot, 0) + 1
for slot in sorted(bucket.keys()):
print(
convert_unix_time_to_time_string(slot * SLOT_LENGTH),
convert_unix_time_to_time_string((slot + 1) * SLOT_LENGTH - 1),
bucket[slot]
)