用python实现统计一篇英文文章内每个单词的出现频率,并返回出现频率最高的前10个单词及其出现次数,并解答以下问题?(标点符号可忽略)
(1) 创建文件对象f后,解释f的readlines和xreadlines方法的区别?
(2) 追加需求:引号内元素需要算作一个单词,如何实现?
问题答案:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from collections import Counter
file_path = './article.txt'
count = Counter()
with open(file_path) as file:
for item in file.readlines():
count.update(Counter(item.split()))
print(count.most_common(10))
(1)关于readlines和xreadlines的区别
readlines是会自动分析换行符,然后将其存在一个列表中,这个方法有个参数可以控制输出多少行。
xreadlines是会返回一个迭代器,但是在python2.3之后文档就不建议使用了。
推荐使用上下文管理器with,这个方法你可以不用操心文件的打开和关闭,同时他会自动对文件进行处理,意思就是不管你打开的是几M或者
几十GB的文件,都不用担心会在读取的时候会把内存的爆满的情况,with语句已经替你处理了。
(2)追加需求:引号内元素需要算作一个单词,如何实现?
解决思路是:以"分割,转换成列表,取其奇数分割,其偶数不做处理,代码如下:
with open(file_path) as file_1:
tmp_list1 = []
for line in file_1.readlines():
tmp_list = line.split('"')
for index in range(len(tmp_list)):
if (index + 1) % 2 != 0:
tmp_list_handle = tmp_list[index].strip()
tmp_list2 = tmp_list_handle.split()
tmp_list1.extend(tmp_list2)
else:
tmp_list1.extend([tmp_list[index]])
count1 = Counter(tmp_list1)
print(count1.most_common(10))