我试图创建一个读取IRC帖子的程序,然后确定该频道的活动。活动将以两种方式衡量:
每小时的帖子
上次执行活动的更改
我想要的方法是创建一个列表字典。字典中的键将是一个时间戳,并将增加一分钟。然后,我将扫描IRC日志中的所有行,并根据写入帖子的时间和日期将帖子添加到相应的键中。因此,我不会发现每分钟有多少帖子(以及小时,天等)。
以下是日志的示例
'[2015-04-22 08:57:36] <Sirisian> ['
我的代码的开头
# -*- coding: utf-8 -*-
in_file = open('Output.txt')
with in_file as f:
data = f.readlines()
#create dictionary of one minute timestamps
start = '[2015-04-22 08:57:00]'
min_store = {}
#check time stamp of post and asign to correct key
如何使用这个[2015-04-22 08:57:00]并返回许多时间戳的代码,所有时间段都会增加1分钟到未来几天/几个月?
答案 0 :(得分:0)
看看datetime.timedelta。您可以将日志日期戳解析为更可行的datetime对象。然后,您可以从中添加和减去datetime.timedelta对象,以获得过去或未来的时间。 datetime对象也是可清除的,因此您可以直接将它们用作字典键,并且可以从字符串中解析日期和时间,以便您可以在日志中加载它。
答案 1 :(得分:0)
您应该只是在看到它们时将帖子添加到此词典中,而不是在日志文件结束时进行猜测。这将使您的脚本可重用。您似乎也误解了如何打开文件。您还应该使用datetime
模块来处理时间戳。这是一个例子:
import datetime
import re
my_dict = {}
with open('Output.txt') as f:
for line in f:
stamp = re.search('\[(.+)\]', line)
stamp = stamp.group(1)
d = datetime.strptime(stamp, '%Y-%m-%d %H:%M:%s')
d.seconds = 0
msg = # here is where the message would go. you need to parse it out
if d in my_dict:
my_dict[d].append(msg)
else:
my_dict[d] = [msg]
玩那个,你应该有一个可重复使用的脚本。
答案 2 :(得分:0)
以下是使用collections
库的方法:
from collections import Counter
import time
cnt = Counter()
date_input_format = '[%Y-%m-%d %H:%M:%S]'
date_output_format = '[%Y-%m-%d %H:%M:00]'
start = time.strptime('[2015-04-22 09:01:00]', date_input_format)
with open('Output.txt') as f:
for line in f:
line_date = time.strptime(line[:21], date_input_format)
if line_date > start:
cnt[time.strftime(date_output_format, line_date)] += 1
#Sort the keys for presentation
moments = cnt.keys()
#Keep track of how much has changed from minute to minute
previous = 0
for moment in sorted(moments):
current = cnt[moment]
print(moment, current, '{0:{1}}'.format((current - previous), '+' if (current - previous) else ''))
previous = current
Output.txt
看起来像这样:
[2015-04-22 08:57:36] Hi
[2015-04-22 08:57:45] Yo
[2015-04-22 08:58:36] Hey
[2015-04-22 08:58:37] Ho
[2015-04-22 09:01:36] Let's
[2015-04-22 09:57:16] Go
[2015-04-22 09:57:26] Good bye
[2015-04-22 09:58:36] See Ya
[2015-04-22 09:59:36] Peace
您应该看到以下输出:
[2015-04-22 09:01:00] 1 +1
[2015-04-22 09:57:00] 2 +1
[2015-04-22 09:58:00] 1 -1
[2015-04-22 09:59:00] 1 0