作业要求参见:https://edu.cnblogs.com/campus/nenu/2019fall/homework/6583。
代码地址:https://e.coding.net/wangkefei/word_frequency.git。
功能1:小文件输入。 为表明程序能跑,结果真实而不是迫害老五,请他亲自键盘在控制台下输入命令。
重点1:打开文本、读至文件结束、将文本中所有字母变为小写(防止因为大小写不同而把相同的单词记为不同)。
def read(filename): with open(filename, encoding='utf-8') as f: lines = f.read().lower() return lines f.close()
重点2:运用正则表达式,将得到的字符串分割,同时去除句中的标点符号;运用filter()函数,过滤掉空格。
import re words = re.split(r'[",", ".", "!", "?", ";", ""","--"]', lines) words = list(filter(None, words))
重点3:将单词存入字典。统计单词及其出现次数,并倒序排序。难点:使用sorted()函数, "key=itemgetter(1)" 对元素根据出现次数进行排序,“reverse=True”实现倒序。
word_counter = {} max_len = 5 for word in words: if len(word) > max_len: max_len += 5 if word in word_counter.keys(): word_counter[word] += 1 else: word_counter[word] = 1 d_sort = sorted(word_counter.items(), key=itemgetter(1), reverse=True) print('total', len(d_sort)) print(' ') formation = "{0:<%ds}{1:<6d}" % max_len for tu in d_sort: print(formation.format(tu[0], tu[1]))
运行截图:
功能2:支持命令行输入英文作品的文件名
重点:在功能1的基础上修改,运用range()函数,只输出前十个出现次数最多的单词。
print(' ') formation = "{0:<%ds}{1:<6d}" % max_len for i in range(min(len(d_sort), 10)): print(formation.format(d_sort[i][0], d_sort[i][1]))
运行截图:
功能3 支持命令行输入存储有英文作品文件的目录名,批量统计。
重点:在功能1的基础上,对读取文件的部分进行了修改。运用了os模块,对命令行的输入进行判断,使用os.path.isfile()和os.path.isdir()函数——如果是文件名,同功能1;如果是文件夹,则使用os.listdir() 函数,获得文件夹中所有的txt文件,对每一个txt文件进行功能2的操作。
def read(filename): if os.path.isfile(filename): with open(filename, encoding='utf-8') as f: lines = f.read().lower() statistics(lines) elif os.path.isdir(filename): dirs = os.listdir(filename) for txt in dirs: with open(filename+'/'+txt, encoding='utf-8') as f: lines = f.read().lower() print(txt) statistics(lines) print('---------------------------------------------')
运行截图:
功能4: 从控制台读入英文单篇作品,这不是为了打脸老五,而是为了向你女朋友炫酷,表明你能提供更适合嵌入脚本中的作品(或者如她所说,不过是更灵活的接口)。如果读不懂需求,请教师兄师姐,或者 bing: linux 重定向,尽管这个功能在windows下也有,搜索关键词中加入linux有利于迅速找到。
答:作业提交前还未完成,之后会继续学习。
PSP图
预计花费时间 | 实际花费时间 | 花费时间差距 | 原因 | |
功能1 | 180min | 454min |
274min | 刚开始思路不清晰,预计会花费较长时间来完成。 决定使用python编写后一边查函数的使用方法一边编写代码。 调试阶段安装pip、将py程序打包成exe,实现从控制台输入命令也花费了一段时间。 |
功能2 | 60min | 73min | 13min | 在功能一的基础上修改,进度比前一阶段快一些。不是很熟悉函数的使用,导致实际比预计时间长。 |
功能3 | 90min | 106min | 16min | 涉及os模块内容,难度稍大,边学边做。 |
功能4 | 240min | 97min | 143min | 对题意理解不深。 |