如何解决计算整个CSV文件以及Python中每行中某些单词的出现次数
我正在处理来自多个服务器的数据,并为每个服务器生成一个CSV文件。我已经设法将所有服务器中的数据编译到一个文件中,并且合并文件具有如下数据-
Description,dc1pp1sellv01,dc1pp2sellv01,dc2pp1sellv01
1.1 Database Placement,PASSED,PASSED
1.2 Use dedicated least privilaged account,PASSED
1.3 Diable MySQL history,FAILED
2.1 Ensure old passwords is set to 1,DEPRICATED,NA
上面文件中的每个服务器列都可以有结果值,可以是以下任意一个-
[“通过”,“失败”,“例外”,“不适用”,“已弃用”]
从上面的CSV文件中,我想计算结果并创建一个如下所示的数据集
Description,dc2pp1sellv01,FAILED,EXCEPTION,NA,DEPRECATED
1.1 Database Placement,3,0
1.2 Use dedicated least privilaged account,0
1.3 Diable MySQL history,2,1,0
2.1 Ensure old passwords is set to 1,1
解决方法
这是一个建议(相当冗长,以突出显示正在发生的事情):
home view
@model IEnumerable<Asp.NETMVCCRUD.Models.ShowModels>
@{
ViewBag.Title = "CTC Company";
Layout = "~/Views/Shared/AdminPage2.cshtml";
}
@foreach (var item in Model)
{
<div class="col-md-3" style="margin-bottom:20px">
<div class="thumbnail">
<div class="img-responsive" style="margin-bottom:20px">
<img src="@Url.Content(item.ImageURL)" target="_blank" style="background-size:cover" height="240" width="240" />
</div>
<div class="caption" style="border-top:3px solid #808080">
**\\ i want to post Panorama value to Show panorama view in image src**
<h4 style="color:blueviolet;font:bolder"><a id="Panorama" name="Panorama" href="/PathroomShow/Showpanorama" target="_blank">@item.Image360File</a></h4>
<h4 style="color:blueviolet;font:bolder"><a href="@Url.Content(item.ImageURL)" onclick="cataloge" target="_blank">@item.ModelName</a></h4>
<h5 style="color:darkslateblue;font:bolder"> Supplier : @item.Cid</h5>
<h5 style="color:darkslateblue;font:bolder"> Model : @item.Sid</h5>
<h5 style="color:darkslateblue;font:bolder"> Pathroom : @item.PathroomNameID</h5>
<h5 style="color:dimgrey;font:bolder">Floor : @item.FloorID</h5>
<h5 style="color:blue;font:bolder">Size : @item.Size</h5>
<h5 style="color:red;font:bolder">Date : @item.DateShow</h5>
</div>
</div>
</div>
}
panorama view
@model Asp.NETMVCCRUD.Models.ShowModels
@*@model IEnumerable<Asp.NETMVCCRUD.Models.ShowModels>*@
@{
ViewBag.Title = "Showpanorama";
}
<h2>Showpanorama</h2>
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/aframe/1.0.4/aframe.min.js"></script>
<a-scene>
** \\this panorama i want to get Image360URL value**
<img id="panorama" src="#" />
<a-sky src="#panorama" rotation="0 -90 0"></a-sky>
</a-scene>
我假设您的数据位于名为import csv
events = ["PASSED","FAILED","EXCEPTION","NA","DEPRECATED"]
# Open files
with open('data.csv','r') as csv_in,open('data_out.csv','w') as csv_out:
# Initialize csv-reader and -writer
csv_reader,csv_writer = csv.reader(csv_in),csv.writer(csv_out)
# Process header
line_in = next(csv_reader)
line_out = line_in + events
csv_writer.writerow(line_out)
# Process data
for line_in in csv_reader:
line_out = line_in
for event in events:
line_out += [sum(1 if event == entry else 0
for entry in line_in[1:])]
csv_writer.writerow(line_out)
的文件中。您必须进行调整。我希望它能起作用...
PS:示例数据中有一个拼写错误:data.csv
应该是DEPRICATED
。这会导致输出异常。
一个更紧凑的版本,没有不必要的辅助变量,如下所示:
DEPRECATED
,
您可以使用Counter对特定单词的出现次数进行计数。假设您已经打开.csv
文件并存储在字符串input
中:您可以执行以下操作:
from collections import Counter
res_values = ("PASSED","DEPRECATED")
input = ("Description,dc1pp1sellv01,dc1pp2sellv01,dc2pp1sellv01\n"
"1.1 Database Placement,PASSED,PASSED\n"
"1.2 Use dedicated least privilaged account,PASSED\n"
"1.3 Diable MySQL history,FAILED\n"
"2.1 Ensure old passwords is set to 1,DEPRICATED,NA")
print('\n'.join(
[line + ',' + ','.join(
[str(Counter(line.split(','))[res])
if i != 0
else res
for res in res_values]
)
for i,line in enumerate(input.split('\n'))]))
我使用列表推导来更好地优化流程(因为文件可能很大),但这是另一个更清晰的代码,其作用完全相同:
split = input.split('\n') # Split the input line by line
for i,line in enumerate(split): # For each line of the input
if i == 0: # Write full result name (for the first line)
split[i] += ','.join(res_values)
else: # Count and write result occurrences
counts = Counter(line.split(','))
for res in res_values:
split[i] += ',' + str(counts[res])
print('\n'.join(split)) # Join the full string
我已经提出了一种易于执行的解决方案,但是出于优化目的,与逐行读取文件相比,将文件存储在像这样的字符串变量中当然更好。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。