问题描述
from string import punctuation
from collections import defaultdict
from operator import itemgetter
import string
def reader(path):
words = str
x=0
distinct = list()
c = 0
d = dict()
dd = defaultdict(int)
try:
f = open(path,'r',encoding='utf8')
except FileNotFoundError:
print("Wrong file name of file path \n")
else:
for line in f:
punc_translator = str.maketrans({key: None for key in punctuation})
cleanString = line.translate(punc_translator)
words = cleanString.split()
length = len(cleanString.split())
c = c + length
cleanString = cleanString.lower()
for keys in cleanString:
d[keys] = d.get(keys,0) + 1
for i in line:
for k,v in d.items():
if i==k:
v+=1
for i in words:
dd[i] += 1
for i,j in dd.items():
if j==1:
distinct.append(i)
t = sorted(d.items(),key=itemgetter(1),reverse=True)
s = sorted(dd.items(),reverse=True)
return c,len(distinct),s[:25],t
def main():
""" Main Menu """
while True:
try:
a = input("Enter file path \n")
b,c,d,e = reader("C://Users/Documents/74-0.txt")
print("The summary is: \n")
print("Total number of words are ",b,"\n")
print("Total number of distinct words are","\n")
print("Top 25 frequent words and their counts are: \n","\n")
print("Character frequency sorted from most frequent to least frequent characters: \n",e,"\n")
break
except:
print("Invalid path")
pass
if __name__=='__main__':
main()
有没有办法提高这段代码的效率。我已经在使用字典了,我知道我可以使用 Collections Counter。有没有办法使用递归来做到这一点,或者还有其他方法吗?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)