一个Python面试题

这是我遇到的一个Python面试题,因为正则表达式用的不熟悉,所以直接没参加。最后心里过意不去,就试着写了写:

问题如下:

请完成一个程序,并能按步骤实现以下功能:

1. 下载https://en.wikipedia.org/wiki/Machine_translation 页面的内容并保存为mt.html

          需要编写代码来下载页面。

2. 统计mt.html中<p>标签内下所有单词以及数目并存储到mt_word.txt中。

          mt_word.txt有如下几点要求:

          a) 每个单词一行。单词在前,单词出现的次数在后,中间用Tab(\t)进行分隔。

          b) 单词要按照单词数目从多到少的顺序进行排列。比如说单词a出现了100次,单词b出现了10次,则单词a要在单词b的前面。


最后实现代码如下:

from bs4 import BeautifulSoup
import re
soup = BeautifulSoup(open('mt.html','r', encoding='UTF-8'),'html.parser')
str1=""
for k in soup.find_all('p'):
     str1 += re.sub(r'(<.*?\w>|\(|\)|\"|\,|\.|\;|\/|\d|\$|\%|\'|\<|\-|\>|\–)', '', str(k))
maps ={}
for v in  re.sub(r"\s+","|",str1).split("|"):
    if v in maps:
        maps[v] += 1
    else:
        maps[v] = 1

lis = sorted(maps.items(), key = lambda asd:asd[1],reverse=True)
print(lis)
for i in lis:
    with open("mt_words.txt", "a+", -1, "utf-8") as f:
        f.write(i[0] + '\t' + str(i[1]) + "\n")


写的不是很好,有改进的空间,仅供参考



  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值