读取文件内容:从一个文本文件中读 取所有行,并将每一行作为一个元素存储到一个列表中。
去除空行:从列表中移除所有的空行,并确保没有多余的空白行。
统计单词频率:计算文件中每个单词出现的次数,忽略大小写,并输出出现次数最多的前5个单词及其频率。
代码:
import re
from collections import Counter
# 第一步:读取文件内容
file_path = 'filename.txt' # 请将'your_file.txt'替换为您的文件名
try:
with open(file_path, 'r', encoding='utf-8') as file:
lines = file.readlines()
except FileNotFoundError:
print(f"文件 {file_path} 未找到。")
exit()
# 第二步:去除空行和多余的空白行
# 使用列表推导式和strip方法去除行尾的空白符(包括换行符),并检查是否为空字符串
cleaned_lines = [line.strip() for line in lines if line.strip()]
# 第三步:统计单词频率
# 使用正则表达式分割单词,并忽略大小写
words = re.findall(r'\b\w+\b', ' '.join(cleaned_lines).lower())
word_counts = Counter(words)
# 输出出现次数最多的前5个单词及其频率
most_common_words = word_counts.most_common(5)
for word, count in most_common_words:
print(f"{word}: {count}")
小猪:
- 文件路径:请确保将
'filename.txt'
替换为您实际要读取的文件的路径和文件名。 - 错误处理:我使用了
try-except
块来处理文件未找到的情况。 - 单词分割:我使用了
re.findall
方法和正则表达式\b\w+\b
来分割单词。这个正则表达式会匹配任何由字母、数字或下划线组成的单词,并且单词前后都有单词边界\b
,这样可以确保我们不会将较长的单词分割成多个部分。 - 大小写忽略:在将所有行连接成一个字符串后,我使用了
.lower()
方法来确保在统计单词频率时忽略大小写。 - 输出:我使用了
Counter
类的most_common
方法来获取出现次数最多的前5个单词及其频率,并打印出来。
正则表达式\b\w+\b
:
\b
是一个单词边界的断言。它匹配的不是一个字符,而是一个位置,这个位置要求紧挨着的字符不能都是单词字符。换句话说,它用于确定单词的开始和结束。\w
匹配任何单词字符,包括字母、数字和下划线(_
)。+
是一个量词,表示前面的模式(在这个例子中是\w
)出现一次或多次。