效果展示:
的:32
军:26
人:25
民:18
情:13
一:12
不:9
爱:8
们:8
在:8
个:8
有:8
时:8
身:7
着:7
战:7
代:7
心:7
是:6
险:6
场:6
水:6
...
方法一:
将整篇文章作为一个字符串,遍历处理
d={}
fi=open("2.txt","r",encoding='gbk')#这里是待打开的文本2.txt
txt=fi.read()#注意这里有.read()
for ch in txt:
if ch in ", 。:“”、!——~
":
continue
else:
d[ch]=d.get(ch,0)+1
ls=list(d.items())
ls.sort(key=lambda x:x[1],reverse=True)
fo=open("3.txt","w",encoding='gbk')#写入3.txt
for i in ls:
fo.write("{}:{}
".format(i[0],i[1]))#注意这里是i[0],i[1]
fi.close()
fo.close()
方法二:
将文章每行处理
d={}
fi=open("2.txt","r",encoding='gbk')#这里是待打开的文本2.txt
for line in fi:
for ch in line:
if ch in ", 。:“”、!——~
":
line.replace(ch,'')#/continue
#line.replace(**", 。:“”、!——~
"**, ''),注意这个replace使用不对,参数中不能给出超过一个被替换字符
else:
d[ch]=d.get(ch,0)+1
ls=list(d.items())
ls.sort(key=lambda x:x[1],reverse=True)
fo=open("3.txt","w",encoding='gbk')#写入3.txt
for i in ls:
fo.write("{}:{}
".format(i[0],i[1]))#注意这里是i[0],i[1]
fi.close()
fo.close()
值得一说的是,行和整篇文章在读取后,都是str类型,因此处理方法大同小异。但有时候并非两种方法可以相互交换使用,比如在提纯原文时,就用行处理会好很多:
比如论语的提纯一题————————注释/原文标题下有下辖几行对应的内容时就需要先找到标题,然后将直到下一个标题出现之前的行全部统计进入该标题,而后处理,显然用行处理更加方便,另外strip,split也更加配合行处理的使用
fi = open("论语.txt", "r")
fo = open("论语-原文.txt", "w")
a=0
for line in fi:#每次读完,line都是一个字符串
if a==1 and line.**count("【注释】")==0 **and line.count("【原文】")==0:
line=line.strip("
")
if line.strip():#去掉各种符号后,如果不是空字符串
fo.write("{}
".format(line))
if line.count("【原文】")>0:
a=1#利用a的值来控制写或者不写
if line.count("【注释】")>0:
a=0
fi.close()
fo.close()