【问题描述】
请统计hamlet.txt文件中出现的英文单词情况,统计并输出出现最多的前n个单词,注意:
(1) 单词不区分大小写,即需将大写转换成小写;
(2) 请在文本中剔除如下特殊符号:!"#$%&()*+,-./:;<=>?@[\\]^_‘{|}~
(3) 输出n个单词和其出现次数,每个单词一行;
(4) 输出单词为小写形式。
此题不涉及编码转换,若想指定编码 可在开始加上
#-*- coding: utf-8 -*-
或 在文件打开处 指定编码
with open("hamlet.txt", "r", encoding='utf-8') as f:
........
【输出形式】
以下仅是输出样例(仅列出3个,需要列出n个),不是最终结果:
the 1138
and 965
to 754
单词 左对齐,并占10个位置; 次数 右对齐,并占5个位置
【完整代码】
# 读文件,并将大写转换成小写
with open("hamlet.txt", "r", encoding='utf-8') as f:
s = f.read().lower()
# 剔除特殊符号
sp = '!"#$%&()*+,-./:;<=>?@[\\]^_‘{|}~'
for i in sp:
s = s.replace(i, ' ')
# 统计单词出现次数
ls = s.split()
dic = {}
for i in ls:
dic[i] = dic.get(i, 0) + 1
cnt = sorted(dic.items(), key=lambda x: x[1], reverse=True)
# 输入输出
n = int(input())
for i in cnt[:n]:
print(f"{i[0]:<10}{i[1]:>5}")
【代码讲解】