简体   繁体   中英

Counting a desired word in a text file

I have to count the number of times a given word appears in a given text file, this one being the Gettysburg Address. For some reason, it is not counting my input of 'nation' so the output looks as such:

'nation' is found 0 times in the file gettysburg.txt

Here is the code I have currently, could someone point out what I am doing incorrectly?

fname = input("Enter a file name to process:")
find = input("Enter a word to search for:")
text = open(fname, 'r').read()
def processone():
    if text is not None:
        words = text.lower().split()
        return words
    else:
        return None

def count_word(tokens, token):
    count = 0
    for element in tokens:
        word = element.replace(",", " ")
        word = word.replace("."," ")

        if word == token:
            count += 1
        return count
words = processone()
word = find
frequency = count_word(words, word)
print("'"+find+"'", "is found", str(frequency), "times in the file", fname)

My first function splits the file into a string and turns all letters in it lower case. The second one removes the punctuation and is supposed to count the word given in the input.

Taking my first coding class, if you see more flaws in my coding or improvements that could be made, as well as helping find the solution to my problem, feel free.

In the for loop in the count_word() function, you have a return statement at the end of the loop, which exits the function immediately, after only one loop iteration.

You probably want to move the return statement to be outside of the for loop.

as a starter I would suggest you to use print statements and see what variables are printing, that helps to breakdown the problem. For example, print word was showing only first word from the file, which would have explained the problem in your code.

def count_word(tokens, token):
    count = 0
    for element in tokens:
        word = element.replace(",", " ")
        word = word.replace("."," ")
        print (word)
        if word == token:
            count += 1
        return count


Enter a file name to process:gettysburg.txt
Enter a word to search for:nation
fourscore
'nation' is found 0 times in the file gettysburg.txt

Use code below:

fname = input("Enter a file name to process:")
find = input("Enter a word to search for:")
text = open(fname, 'r').read()
def processone():
    if text is not None:
        words = text.lower().split()
        return words
    else:
        return None

def count_word(tokens, token):
    count = 0
    for element in tokens:
        word = element.replace(",", " ")
        word = word.replace("."," ")

        if word == token:
            count += 1
    return count

words = processone()

word = find
frequency = count_word(words, word)
print("'"+find+"'", "is found", str(frequency), "times in the file", fname)

statement "return" go out statement "for"

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM