试图在文件中查找最常出现的名称

时间:2013-11-25 14:33:19

标签: python file python-3.x

我有4个文本文件,我想阅读并找到前5个最常出现的名字。文本文件的名称格式如下“Rasmus,M,11”。下面是我的代码,现在可以调用所有文本文件然后读取它们。现在,此代码打印出文件中的所有名称。

def top_male_names ():
    for x in range (2008, 2012):
        txt = "yob" + str(x) + ".txt"
        file_handle = open(txt, "r", encoding="utf-8") 

        file_handle.seek(0)

        line = file_handle.readline().strip()

        while line != "":
            print (line)
            line = file_handle.readline().strip()

top_male_names()

我的问题是,如何跟踪所有这些名称,并找到最常出现的前5名?我能想到的唯一方法是为每个名称创建一个变量,但这不起作用,因为每个文本文件中有100个条目,可能有100个不同的名称。

2 个答案:

答案 0 :(得分:1)

这是它的要点:

from collections import Counter

counter = Counter()

for line in file_handle:
    name, gender, age = line.split(',')
    counter[name] += 1

print counter.most_common()

您可以根据自己的计划进行调整。

答案 1 :(得分:0)

如果您需要计算文本中的多个单词,请使用正则表达式。

例如

import re

my_string = "Wow! Is this true? Really!?!? This is crazy!"

words = re.findall(r'\w+', my_string) #This finds words in the document

输出:

>>> words
['Wow', 'Is', 'this', 'true', 'Really', 'This', 'is', 'crazy']

“是”和“是”是两个不同的词。所以我们可以将所有单词大写,然后计算它们。

from collections import Counter

cap_words = [word.upper() for word in words] #capitalizes all the words

word_counts = Counter(cap_words) #counts the number each time a word appears

输出:

>>> word_counts
Counter({'THIS': 2, 'IS': 2, 'CRAZY': 1, 'WOW': 1, 'TRUE': 1, 'REALLY': 1})

现在正在阅读文件:

import re
from collections import Counter

with open('file.txt') as f: text = f.read()

words = re.findall(r'\w+', text )

cap_words = [word.upper() for word in words]

word_counts = Counter(cap_words)

然后你只需要对包含所有单词的dict进行排序,对于不是键的值,看看前5个单词。