这是我遇到的一个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")