python从cs返回特定服务器在特定时间使用许可证的次数

2024-09-29 23:26:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个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 我该怎么做


Tags: csvnamebasetimeconsumerlicencerowserver1
1条回答
网友
1楼 · 发布于 2024-09-29 23:26:29

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}}}

相关问题 更多 >

    热门问题