Задать вопрос
@10farid10
Учу python :)

Как найти количество переходов между сессиями python?

Знаю что по правилам нельзя задавать 2 вопроса, но лучше указать их в одном вопросе так как они схожие. У меня никак не получается вывести нужные мне данные. Мой код:
from pathlib import Path
print("Начало даты")
date1 = '2020-01-01'
print("Конец даты")
date2 = '2020-12-31'


import os
import pandas as pd

mylist=[]
for path in Path().glob('ot-*.log'):
    if f'ot-{date1}.log' <= path.name <= f'ot-{date2}.log':
        mylist.append(path.name)


import re
from datetime import datetime

with open('final.txt', 'w', encoding='utf-8') as outfile:
    for fname in mylist:
        file_date = fname.replace('ot-', '').replace('.log', '')
        with open(fname, encoding='utf-8') as infile:
            for line in infile:
                outfile.write(file_date + ' ' + line)



sessions = {}

data = []

with open('final.txt', 'r', encoding='utf-8') as f:
    log = f.readlines()


for line in log:

    if 'Login successful' in line:
        chunks = re.search(r"(.+?) Login successful from user (.+?) from .+ session=(.+?) .+", line)

        
        login_time = datetime.strptime(chunks.group(1), '%Y-%m-%d %I:%M:%S %p')

        sessions[chunks.group(3)] = {'login_time': login_time, 'username': chunks.group(2)}
        
    elif 'Closing session' in line:
        
        chunks = re.search(r'(.+?) Closing session.+session=(.+?) .+', line)

        logout_time = datetime.strptime(chunks.group(1), '%Y-%m-%d %I:%M:%S %p')
        session_id = chunks.group(2)

        if session_id not in sessions:
            print('Сессия {} закрыта, нет данных о входе'.format(session_id))
        else:
            login_time = sessions[session_id]['login_time']
            username = sessions[session_id]['username']
            session_time = logout_time - login_time
            #print('Пользователь {} зашел в {}, вышел в {}. Время сеанса- {} . ID сессии- {}'.format(username, login_time, logout_time, session_time, session_id))
            data.append([username, login_time,logout_time,session_id,  session_time,session_time ])  
            del sessions[session_id]


df = pd.DataFrame(data, columns=['user_name', 'login', 'logout', 'session id', 'session_time','session_time_s' ])
df


Результат:
5feaef31cd722081342899.png

Вопрос: Как найти количество переходов сессии между сутками (если пользователь зашел в один день, а вышел в другой) и продолжительность текущей сессии (если сотрудник зашел, но в указанном промежутке времени еще не завершил сессию, в данном случае конец сессии берется 23.59 указанной даты "по")?
P.S 1- Если пользователь был несколько дней в сети количество все равно должно считаться как один (1). 2- Допустим пользователь зашел 10ого числа в 19.00, а конец даты указан 10е число, нужно чтоб он брал окончание сессии 10е число 23.59
  • Вопрос задан
  • 68 просмотров
Подписаться 1 Простой 1 комментарий
Решения вопроса 1
@10farid10 Автор вопроса
Учу python :)
Придумал такой вариант для первой части

p = []
for _datetime, af in zip(df.login, df.logout):
    dfDate = int(_datetime.strftime('%Y%m%d'))
    sw = int(af.strftime('%Y%m%d'))
    if dfDate == sw:
        i=0
        p.append(i)
    else:
        i=1
        p.append(i)
df['cc'] = p


Вторую часть тоже удалось решить, пришлось поменять немного логику кода. Если будет интересно могу описать решение и скинуть код
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы