python统计字符问题

代码如下:

import string
def countfeq(word_list):
    word_list=word_list.strip('\r\n')
    word_list=word_list.split('/')
    word_list_dict={}
    for i in word_list:
        if i in word_list_dict.keys():
           word_list_dict[i]+=1
        else:
           word_list_dict[i]=1
    return word_list_dict
if __name__ == "__main__":
    file=open('words.txt','r',encoding='utf-8')
    word_list=file.read()
    result=countfeq(word_list)
    word=input()
    if word in result.keys():
        print(result[word])
    else:
        print(0)

其中words.txt中内容为:

我/是/一个/测试/句子/,/大家/赶快/来/统计/我/吧/,/大家/赶快/来/统计/我/吧/,/大家/赶快/来/统计/我/吧/,/重要/事情/说/三遍/!/
我/是/一个/测试/句子/,/大家/赶快/来/统计/我/吧/,/大家/赶快/来/统计/我/吧/,/大家/赶快/来/统计/我/吧/,/重要/事情/说/三遍/!/
我/是/一个/测试/句子/,/大家/赶快/来/统计/我/吧/,/大家/赶快/来/统计/我/吧/,/大家/赶快/来/统计/我/吧/,/重要/事情/说/三遍/!/

统计结果“我”应该出现12次,目前我的代码只能出现10次,请问是什么原因。如何解决,谢谢

word_list=word_list.strip('\r\n')只能去掉文本开头和结尾两边的\r\n。

文本中间的\r\n没有去掉。

你输出下word_list_dict字典就知道是什么原因了。

应该用

    word_list=word_list.replace('\n',"").replace('\r',"")

 

或者在循环中对每个元素用i.strip()也可以

 

def countfeq(word_list):

    word_list=word_list.split('/')

    word_list_dict={}

    for i in word_list:

        i = i.strip() #在循环中对每个元素用i.strip()也可以

        if i in word_list_dict.keys():

           word_list_dict[i]+=1

        else:

           word_list_dict[i]=1

    return word_list_dict

 

strip只能去掉字符串首尾的空分隔符,中间的空分隔符还会存在,因此,words.txt中第2行、第3行开始的“我”和前一行的换行符被前后两个/分割成一个关键字,“我”字就会少两个。另外,导入string意欲何为?下面是我帮题主修改后的代码。

def countfeq(word_list):
    result = dict()
    for line in word_list:
        for w in line.split('/'):
            result.update({w:result.get(w,0) + 1})
    
    return result

if __name__ == "__main__":
    with open('words.txt','r',encoding='utf-8') as fp:
        word_list = fp.readlines()
    
    result = countfeq(word_list)
    word = input('请输入:')
    
    if word in result.keys():
        print(result[word])
    else:
        print(0)