Electric
Electric

Reputation: 537

Counting number of occurrence of a string in a text file

I have a text file containing:

Rabbit:Grass
Eagle:Rabbit
Grasshopper:Grass
Rabbit:Grasshopper
Snake:Rabbit
Eagle:Snake

I want to count the number of occurrence of a string, say, the number of times the animals occur in the text file and print the count. Here's my code:

fileName = input("Enter the name of file:")
foodChain = open(fileName)
table = []

for line in foodChain:
    contents = line.strip().split(':')
    table.append(contents)

def countOccurence(l):
    count = 0
    for i in l:
        #I'm stuck here#
        count +=1
    return count

I'm unsure about how will python count the occurrence in a text file. The output i wanted is:

Rabbit: 4 
Eagle: 2
Grasshopper: 2
Snake: 2 
Grass: 2

I just need some help on the counting part and I will be able to manage the rest of it. Regards.

Upvotes: 1

Views: 9860

Answers (4)

sparrow
sparrow

Reputation: 11470

from collections import defaultdict
dd = defaultdict(int)
with open(fpath) as f:
    for line in f:
        words = line.split(':')
        for word in words:
            dd[word]  += 1

for k,v in dd.items():
    print(k+': '+str(v))

Upvotes: 0

what you need is a dictionary.

dictionary = {}
for line in table:
    for animal in line:
        if animal in dictionary:
            dictionary[animal] += 1
        else:
            dictionary[animal] = 1

for animal, occurences in dictionary.items():
    print(animal, ':', occurences)

Upvotes: 1

nick
nick

Reputation: 853

Use in to judge if an array is an element of another array, in Python, you can use a string as array:

def countOccurence(l):
    count = 0
    #I'm stuck here#
    if l in table:
        count +=1
    return count

Upvotes: 0

RomanPerekhrest
RomanPerekhrest

Reputation: 92894

The solution using str.split(), re.sub() functions and collections.Counter subclass:

import re, collections

with open(filename, 'r') as fh:
    # setting space as a common delimiter
    contents = re.sub(r':|\n', ' ', fh.read()).split()
    counts = collections.Counter(contents)

# iterating through `animal` counts
for a in counts:
    print(a, ':', counts[a])

The output:

Snake : 2
Rabbit : 4
Grass : 2
Eagle : 2
Grasshopper : 2

Upvotes: 0

Related Questions