用python實(shí)現(xiàn)統(tǒng)計一篇英文文章內(nèi)每個單詞的出現(xiàn)頻率,并返回出現(xiàn)頻率最高的前10個單詞及其出現(xiàn)次數(shù)纽谒,并解答以下問題祷肯?(標(biāo)點(diǎn)符號可忽略)
(1) 創(chuàng)建文件對象f后,解釋f的readlines和xreadlines方法的區(qū)別妄壶?
(2) 追加需求:引號內(nèi)元素需要算作一個單詞,如何實(shí)現(xiàn)寄狼?
問題答案:
#!/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)關(guān)于readlines和xreadlines的區(qū)別
readlines是會自動分析換行符丁寄,然后將其存在一個列表中,這個方法有個參數(shù)可以控制輸出多少行泊愧。
xreadlines是會返回一個迭代器伊磺,但是在python2.3之后文檔就不建議使用了。
推薦使用上下文管理器with,這個方法你可以不用操心文件的打開和關(guān)閉拼卵,同時他會自動對文件進(jìn)行處理奢浑,意思就是不管你打開的是幾M或者
幾十GB的文件,都不用擔(dān)心會在讀取的時候會把內(nèi)存的爆滿的情況腋腮,with語句已經(jīng)替你處理了雀彼。
(2)追加需求:引號內(nèi)元素需要算作一個單詞,如何實(shí)現(xiàn)即寡?
解決思路是:以"分割徊哑,轉(zhuǎn)換成列表,取其奇數(shù)分割聪富,其偶數(shù)不做處理,代碼如下:
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))