Python - фильтр по дате - PullRequest
       3

Python - фильтр по дате

0 голосов
/ 20 марта 2010

Как подсчитать, сколько входов в систему было выполнено за день в системе с использованием файла журнала в Python?

Ответы [ 2 ]

1 голос
/ 20 марта 2010

Вам не нужен Python, оболочка сделает:

grep "Login succeeded_or_whatever_the_log_says" logfile | wc -l

Если вы действительно настаиваете на использовании Python, попробуйте

print(sum(
     1 for line in open('logfile')
           if 'Login succeeded_or_whatever_the_log_says' in line))

Если сообщение об успешном входе в систему занимает несколько строк:

print(open('logfile').read().count('login\nsucceeded'))

Вам не нужно беспокоиться о закрытии дескриптора файла; Python делает это автоматически, когда GCing дескриптор файла:

$ touch x
$ python -c 'import time; open("x"); time.sleep(2)' & sleep 1 && fuser x
[1] 23232
$

но

$ python -c 'import time; f=open("x"); time.sleep(2)' & sleep 1 && fuser x
[1] 23265
x:                   23265
$
0 голосов
/ 20 марта 2010

Вы можете создать словарь с днём в качестве ключа и счётчиком логина в качестве значения. Затем прочитайте файл построчно, извлекая дату из каждой строки и увеличивая количество входов в систему на этот день.

Я думаю, что-то вроде этого должно работать:

login_cnts = {}

def get_date(line):
    """extract date from line, in this example line starts with YYYY-MM-DD (10 chars)"""
    if line and len(line) > 10:
        return line[:10]
    return None


for line in open(fname):
    date_str = get_date(line)
    if date_str:
        try:
            login_cnts[date_str] += 1
        except KeyError:
            login_cnts[date_str] = 1

days = login_cnts.keys()
days.sort()
for d in days:
    print("%s: %d" % (d, login_cnts[d]))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...