[英]Counting occurence of words in CSV column and writing to another CSV?
我一直致力於制作一個打開CSV文件的程序,計算出出“信息”,“低”,“中”,“高”和“嚴重”等字樣的次數,並將結果寫入a不同的CSV。 在此過程中,我希望它能夠解析多個格式相同的CSV信息,並將所有結果寫入一個CSV。 這是我到目前為止:
import sys
import csv
import collections
severity = collections.Counter()
with open(r'C:\Report.csv', 'r') as f:
reader = csv.reader(f)
for row in reader:
severity[row[3]] +=1
print(severity.most_common)
with open(r'C:\test.csv', 'a', newline='') as write_file:
sevwrite = csv.writer(write_file, delimiter= ',',
quotechar=' ', quoting=csv.QUOTE_MINIMAL)
sevwrite.writerow([severity.most_common])
它寫得很全
<bound method Counter.most_common of Counter({'Info': 510, 'Medium': 30, 'Low': 24, 'High': 7, 'Severity': 1})>
進入Test.CSV文件。 任何幫助表示贊賞。
您需要調用 most_common
方法:
print(severity.most_common())
和
sevwrite.writerow(severity.most_common())
由於.most_common()
方法返回元組列表,因此無法寫出您想要的.most_common()
。 每個元組一個鍵和相應的計數。 因此,上面的sevwrite.writerow()
調用( 沒有列表文字[...]
)將寫入:
('Info', 510),('Medium', 30),('Low', 24),('High', 7),('Severity', 1)
到文件。 因為.most_common()
按排序順序(從最高計數到最低計數.most_common()
返回此列表,所以不同的輸入CSV很可能會導致不同的嚴重性排序。
如果輸出CSV文件中的每一行都包含計數,您可能希望將列保持在相同的一致順序中。 您也不需要包含嚴重性密鑰; 這可能是CSV文件頭的一部分。
我在這里使用csv.DictWriter()
代替:
with open(r'C:\test.csv', 'a', newline='') as write_file:
sevwrite = csv.DictWriter(write_file, ('High', 'Severity', 'Medium', 'Info', 'Low'))
sevwrite.writerow(severity)
現在,每次只在同一列中為每個鍵寫入計數。 csv.DictWriter()
的第二個參數設置將值寫入列的順序。
請注意,您也可以在此處簡化閱讀 :
import csv
from collections import Counter
with open(r'C:\Report.csv', 'r') as f:
reader = csv.reader(f)
severities = Counter(r[3] for r in reader)
這就是你在這里建立Counter
對象所需要的。
現在,要為一系列輸入文件執行此操作,您可以使用:
import csv
from collections import Counter
with open(r'C:\test.csv', 'w', newline='') as write_file:
sevwrite = csv.DictWriter(write_file, ('High', 'Severity', 'Medium', 'Info', 'Low'))
sevwrite.writeheader()
for filename in list_of_filenames:
with open(r'C:\Report.csv', 'r') as f:
reader = csv.reader(f)
severities = Counter(r[3] for r in reader)
sevwrite.writerow(severities)
這里打開輸出文件進行寫入(不附加); 這使我們有機會使用sevwrite.writeheader()
在頂部添加標題行。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.