Python возвращает число раз, когда лицензия использовалась под конкретным сервером в определенное время из CSV - PullRequest
0 голосов
/ 09 марта 2019

У меня есть CSV-файл с именем user_log.csv.Мне нужно посчитать, сколько раз используется каждая лицензия на конкретном сервере и в каждый конкретный момент времени.Файл журнала csv выглядит следующим образом:

Report Date Time,Server,Licence,User,Host,In Use Since Date Time
02/02/2019 11:50,server1,teamcenter_author,user115,TcServer,02/02/2019 11:48
02/02/2019 11:50,server1,teamcenter_consumer,user133,TcServer,02/02/2019 08:57
02/02/2019 11:50,server2,teamcenter_consumer,user31,TcServer,02/02/2019 10:07
02/02/2019 11:50,server1,teamcenter_consumer,user120,TcServer,02/02/2019 10:15
02/02/2019 11:50,server1,visview_base,user120,client1,02/02/2019 05:14
02/02/2019 11:50,server1,visview_base,user12,client2,02/02/2019 07:19
02/02/2019 11:50,server1,visview_base,user95,client3,02/02/2019 11:10
02/02/2019 11:50,server3,NX12100N,user70,client4,02/01/2019 10:54
02/02/2019 11:50,server3,NX12100N_gateway,user70,client4,02/01/2019 10:54
02/02/2019 11:50,server3,NX12100N_solid_modeling,user70,client4,02/01/2019 10:54
02/02/2019 11:55,server1,teamcenter_author,user115,TcServer,02/02/2019 11:48
02/02/2019 11:55,server1,teamcenter_consumer,user133,TcServer,02/02/2019 08:57
02/02/2019 11:55,server1,teamcenter_consumer,user31,TcServer,02/02/2019 10:07
02/02/2019 11:55,server1,teamcenter_consumer,user120,TcServer,02/02/2019 10:15
02/02/2019 11:55,server1,visview_base,user120,client1,02/02/2019 05:14
02/02/2019 11:55,server1,visview_base,user12,client2,02/02/2019 07:19
02/02/2019 11:55,server1,visview_base,user95,client3,02/02/2019 11:10
02/02/2019 11:55,server1,visview_base,user115,TcServer,02/02/2019 11:50
02/02/2019 11:55,server3,NX12100N,user70,client4,02/01/2019 10:54
02/02/2019 11:55,server3,NX12100N_gateway,user70,client4,02/01/2019 10:54
02/02/2019 11:55,server3,NX12100N_solid_modeling,user70,client4,02/01/2019 10:54

и код, который я написал, выглядит следующим образом:

file = open('/user_log.csv', "r")
reader= csv.reader(file)
time={}
for row in reader:
    licence_name = row[2]
    server = row[1]

    if licence_name in time.keys():
        if server in licence_name:
            time[row[2]][row[1]]['count'] += 1
        else:
            time.setdefault(licence_name,{}).setdefault(server,{})['count'] =1
    else:
        time.setdefault(licence_name,{}).setdefault(server,{})['count']=1

return render(request, "stats.html", {'no_of_line':time})

вывод, который я получаю, выглядит примерно так:

this Как мне это сделать?

1 Ответ

0 голосов
/ 09 марта 2019

license_name - это строка, а не словарь.Вы хотите проверить, находится ли server во вложенном словаре.

Вы можете использовать if license_name in time, вам не нужно использовать time.keys().

Вам не нужны всеsetdefault() звонки, просто создайте новые словари, как вы хотите их.Вместо этого вы можете использовать это, чтобы сжать весь этот код в одну строку.

file = open('/user_log.csv', "r")
reader= csv.reader(file)
next(reader, None) # Skip the header line
time={}
for row in reader:
    license_name = row[2]
    server = row[1]

    if licence_name in time:
        if server in time[licence_name]:
            time[licence_name][server]['count'] += 1
        else:
            time[licence_name][server] = {"count": 1}
    else:
        time[licence_name] = { server: { "count": 1 } }

return render(request, "stats.html", {'no_of_line':time})

Значение time, которое я получаю с этим кодом, и пример файла CSV:

{'NX12100N': {'server3': {'count': 2}},
 'NX12100N_gateway': {'server3': {'count': 2}},
 'NX12100N_solid_modeling': {'server3': {'count': 2}},
 'teamcenter_author': {'server1': {'count': 2}},
 'teamcenter_consumer': {'server1': {'count': 5}, 'server2': {'count': 1}},
 'visview_base': {'server1': {'count': 7}}}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...