python面试题-2018-01-29

用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))

你可能感兴趣的:(python面试题-2018-01-29)