如何在python

时间:2015-10-18 18:28:22

标签: python

我试图创建一个读取IRC帖子的程序,然后确定该频道的活动。活动将以两种方式衡量:

  1. 每小时的帖子

  2. 上次执行活动的更改

  3. 我想要的方法是创建一个列表字典。字典中的键将是一个时间戳,并将增加一分钟。然后,我将扫描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分钟到未来几天/几个月?

3 个答案:

答案 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