A program that opens a text file, counts the number of words and reports the top N words ordered by the number of times they appear in the file?

kmz picture kmz · Jul 5, 2013 · Viewed 29.8k times · Source

Hi all im a beginner at programming, i was recently given the task of creating this program and i am finding it difficult. I have previously designed a program that calculates the number of words in a sentence that are typed in by the user, is it possible to modify this program to achieve what i want?

import string
def main():
  print "This program calculates the number of words in a sentence"
  print
  p = raw_input("Enter a sentence: ")
  words = string.split(p)
  wordCount = len(words)
  print "The total word count is:", wordCount
main()

Answer

Ashwini Chaudhary picture Ashwini Chaudhary · Jul 5, 2013

Use collections.Counter for counting words and open() for opening the file:

from collections import Counter
def main():
    #use open() for opening file.
    #Always use `with` statement as it'll automatically close the file for you.
    with open(r'C:\Data\test.txt') as f:
        #create a list of all words fetched from the file using a list comprehension
        words = [word for line in f for word in line.split()]
        print "The total word count is:", len(words)
        #now use collections.Counter
        c = Counter(words)
        for word, count in c.most_common():
           print word, count
main()

collections.Counter example:

>>> from collections import Counter
>>> c = Counter('aaaaabbbdddeeegggg')

Counter.most_common returns words in sorted order based on their count:

>>> for word, count in c.most_common(): 
...     print word,count
...     
a 5
g 4
b 3
e 3
d 3