二级python两种不同处理方式统计字频

效果展示:
的: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()
这篇文章,是又一个故事的结束...
lazy's story is continuing.
原文地址:https://www.cnblogs.com/Hello-world-hello-lazy/p/15318167.html