美文网首页
python面试题-2018-01-29

python面试题-2018-01-29

作者: Mr大大大 | 来源:发表于2018-01-29 23:35 被阅读0次

    用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

          本文链接:https://www.haomeiwen.com/subject/hkfqzxtx.html