簡體   English   中英

計算CSV列中單詞的出現次數並寫入另一個CSV?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM