[英]Counting number of occurance of a string in python
這個問題是基於這里提供的答案1
我想計算文本文件中字符串出現的次數,借助上面鏈接的帖子,我提出了以下建議。 但是在某些情況下,它並非每次都能正常運行。
編碼:
def counter(filename):
from collections import Counter
with open(filename, 'r') as f:
c = Counter(f)
# use iteritems() in python 2.7 instead of items
for key, value in c.iteritems():
print(" > " + key.strip() + ': \033[1m\033[32m{:d} visit\033[0m'.format(value))
此數據工作正常
X_0_Gui_Menu_322_Menu_Outputs_SDI_overlays
X_0_Gui_Menu_3231_Menu_Outputs_SDI_status
X_0_Gui_Menu_322_Menu_Outputs_SDI_overlays
X_0_Gui_Menu_321_Menu_Outputs_SDI_processing
X_0_Gui_Menu_322_Menu_Outputs_SDI_overlays
X_0_Gui_Menu_3231_Menu_Outputs_SDI_status
產生如下輸出:
X_0_Gui_Menu_3231_Menu_Outputs_SDI_status:2次訪問X_0_Gui_Menu_322_Menu_Outputs_SDI_overlays:3次訪問X_0_Gui_Menu_321_Menu_Outputs_SDI_processing:1次訪問
但是對於以下輸入它無法正常工作
"StatusInfoSet (2, 12)"
"StatusInfoSet (2, 44)"
"CenterMark (2, 2)"
"FrameSet (2, 0)"
"FrameSet (2, 1)"
"FrameSet (2, 0)"
"CenterMark (2, 1)"
"StatusInfo (2, 1)"
"StatusInfo (2, 0)"
"SurroundMask (2, 2)"
MediaCodec (3)
SetSensorFormat (1)
UserSwitchSet (99)
SetExIndex (10)
SetExIndex (11)
"EiSwitchAssign (1, 11)"
Hello
Hello
Hello
Hello
Hello
產生的輸出是:
> Hello: 1 visit
> Hello: 4 visit
> SetSensorFormat: 1 visit
> SetExIndex: 2 visit
> : 1 visit
> StatusInfoSet: 2 visit
> SurroundMask: 1 visit
> UserSwitchSet: 1 visit
> EiSwitchAssign: 1 visit
> MediaCodec: 1 visit
> FrameSet: 3 visit
> StatusInfo: 2 visit
> CenterMark: 2 visit
這不完全是我想要的工作方式。 如您所見,盡管計數正確,但兩次提到“ Hello
,但也沒有數據訪問1次。
我還希望代碼將訪問量從高到低排列在頂部,例如:
X_0_Gui_Menu_322_Menu_Outputs_SDI_overlays:3次訪問X_0_Gui_Menu_3231_Menu_Outputs_SDI_status:2次訪問X_0_Gui_Menu_321_Menu_Outputs_SDI_processing:1次訪問
對此問題有一些指導將是很棒的。
在計數之前,您需要刪除輸入的項目; 對生成器表達式中的行進行預處理以去除空格:
with open(filename, 'r') as f:
c = Counter(line.strip() for line in f if line.strip())
我也跳過了空行。 可以擴展它以提取您想要計算的更詳細的信息。
最高到最低的排序很容易; 只需使用Counter.most_common()
方法 :
for key, value in c.most_common():
print(" > {}: \033[1m\033[32m{:d} visit\033[0m'.format(key, value))
這將返回從最高到最低排序的項目。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.