Python脚本统计每个字符的次数/频数(字频统计)
作者:末初 编辑:白帽子社区运营团队
"白帽子社区在线CTF靶场BMZCTF,欢迎各位在这里练习、学习,BMZCTF全身心为网络安全赛手提供优质学习环境,链接(http://www.bmzclub.cn/)
"
使用count()
计数,可统计所有可显示字符
# -*- coding:utf-8 -*-
# Author: MoChu7
alphabet = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890!@#$%^&*()\_+-/={}[] "#所有正常打印字符
strings = open('./text.txt').read()#读取需要统计频数的文本
result = {}
for i in alphabet:
counts = strings.count(i)
i = '{0}'.format(i)
result[i] = counts
res = sorted(result.items(), key=lambda item: item[1], reverse=True)
num = 0
for data in res:
num += 1
print('频数第{0}: {1}'.format(num, data))
print('\n---------------以下是频数从多到少的字符,按照从前到后排序---------------')
for i in res:
flag = str(i[0])
print(flag[0], end="")
运行结果如下例所示
频数第1: ('a', 32)
频数第2: ('g', 22)
频数第3: ('F', 22)
频数第4: ('1', 22)
频数第5: ('w', 20)
频数第6: ('e', 19)
频数第7: ('f', 13)
频数第8: ('h', 13)
频数第9: ('t', 13)
频数第10: ('u', 12)
频数第11: ('A', 12)
频数第12: ('7', 12)
频数第13: ('#', 12)
频数第14: ('4', 11)
频数第15: ('!', 11)
频数第16: ('/', 10)
频数第17: ('z', 9)
频数第18: ('S', 9)
频数第19: ('5', 9)
频数第20: ('\\', 9)
频数第21: ('i', 8)
频数第22: ('6', 8)
频数第23: ('8', 8)
频数第24: ('0', 8)
频数第25: ('%', 8)
频数第26: ('b', 7)
频数第27: ('r', 7)
频数第28: ('H', 7)
频数第29: (' ', 7)
频数第30: ('p', 6)
频数第31: ('q', 6)
频数第32: ('v', 6)
频数第33: ('G', 6)
频数第34: ('Z', 6)
频数第35: ('2', 6)
频数第36: ('9', 6)
频数第37: ('-', 6)
频数第38: ('o', 5)
频数第39: ('O', 5)
频数第40: ('W', 5)
频数第41: ('$', 5)
频数第42: ('*', 5)
频数第43: ('=', 5)
频数第44: ('}', 5)
频数第45: ('[', 5)
频数第46: (']', 5)
频数第47: ('s', 4)
频数第48: ('y', 4)
频数第49: ('I', 4)
频数第50: ('R', 4)
频数第51: ('T', 4)
频数第52: ('X', 4)
频数第53: (')', 4)
频数第54: ('d', 3)
频数第55: ('k', 3)
频数第56: ('n', 3)
频数第57: ('C', 3)
频数第58: ('D', 3)
频数第59: ('E', 3)
频数第60: ('Q', 3)
频数第61: ('V', 3)
频数第62: ('@', 3)
频数第63: ('^', 3)
频数第64: ('&', 3)
频数第65: ('(', 3)
频数第66: ('_', 3)
频数第67: ('+', 3)
频数第68: ('c', 2)
频数第69: ('x', 2)
频数第70: ('B', 2)
频数第71: ('J', 2)
频数第72: ('K', 2)
频数第73: ('L', 2)
频数第74: ('U', 2)
频数第75: ('Y', 2)
频数第76: ('3', 2)
频数第77: ('{', 2)
频数第78: ('j', 1)
频数第79: ('l', 1)
频数第80: ('m', 1)
频数第81: ('P', 1)
频数第82: ('M', 0)
频数第83: ('N', 0)
---------------以下是频数从多到少的字符,按照从前到后排序---------------
agF1wefhtuA7#4!/zS5\i680%brH pqvGZ29-oOW$*=}[]syIRTX)dknCDEQV@^&(_+cxBJKLUY3{jlmPMN
使用正则匹配
查找计数,只能统计所有大小写字母、数字以及空格,无法统计特殊字符
# -*- coding:utf-8 -*-
# Author: MoChu7
import re
file = open('./text.txt') # 读取文件的路径
line = file.readlines()
file.seek(0, 0)
file.close()
result = {} # 使用字典来保存查询信息
strings = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890 "
for i in strings:
count = 0
for j in line:
find_line = re.findall(i, j) # 查找出每一行匹配的字母
count += len(find_line) # 把每一行的查询结果数相加
result[i] = count # 向字典存入每个字母的最终查询的结果
res = sorted(result.items(), key=lambda item: item[1], reverse=True) # 对字典的value进行排序,降序,res是一个可迭代对象
num = 1
for x in res: # 递归输出一下字典的每一个元素
print('频数第{0}: '.format(num), x)
num += 1
运行结果如下例所示
频数第1: ('a', 32)
频数第2: ('g', 22)
频数第3: ('F', 22)
频数第4: ('1', 22)
频数第5: ('w', 20)
频数第6: ('e', 19)
频数第7: ('f', 13)
频数第8: ('h', 13)
频数第9: ('t', 13)
频数第10: ('u', 12)
频数第11: ('A', 12)
频数第12: ('7', 12)
频数第13: ('4', 11)
频数第14: ('z', 9)
频数第15: ('S', 9)
频数第16: ('5', 9)
频数第17: ('i', 8)
频数第18: ('6', 8)
频数第19: ('8', 8)
频数第20: ('0', 8)
频数第21: ('b', 7)
频数第22: ('r', 7)
频数第23: ('H', 7)
频数第24: (' ', 7)
频数第25: ('p', 6)
频数第26: ('q', 6)
频数第27: ('v', 6)
频数第28: ('G', 6)
频数第29: ('Z', 6)
频数第30: ('2', 6)
频数第31: ('9', 6)
频数第32: ('o', 5)
频数第33: ('O', 5)
频数第34: ('W', 5)
频数第35: ('s', 4)
频数第36: ('y', 4)
频数第37: ('I', 4)
频数第38: ('R', 4)
频数第39: ('T', 4)
频数第40: ('X', 4)
频数第41: ('d', 3)
频数第42: ('k', 3)
频数第43: ('n', 3)
频数第44: ('C', 3)
频数第45: ('D', 3)
频数第46: ('E', 3)
频数第47: ('Q', 3)
频数第48: ('V', 3)
频数第49: ('c', 2)
频数第50: ('x', 2)
频数第51: ('B', 2)
频数第52: ('J', 2)
频数第53: ('K', 2)
频数第54: ('L', 2)
频数第55: ('U', 2)
频数第56: ('Y', 2)
频数第57: ('3', 2)
频数第58: ('j', 1)
频数第59: ('l', 1)
频数第60: ('m', 1)
频数第61: ('P', 1)
频数第62: ('M', 0)
频数第63: ('N', 0)
评论