我有一个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})我得到的输出是这样的:

我该怎么做呢?
发布于 2019-03-10 03:14:26
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})我使用此代码和示例CSV文件获得的time的值为:
{'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}}}https://stackoverflow.com/questions/55080933
复制相似问题