Rosie Papaya
Rosie Papaya

Reputation: 17

'str' object has no attribute 'txt'

I'm trying to get this code to work and keep getting AttributeError: 'str' object has no attribute 'txt'

my code is as written below, I am new to this so any help would be greatly appreciated. I for the life of me cannot figure out what I am doing wrong.

def countFrequency(alice):
    # Open file for reading
    file = open(alice.txt, "r")
  
    # Create an empty dictionary to store the words and their frequency
    wordFreq = {}
  
    # Read file line by line
    for line in file:
        # Split the line into words
        words = line.strip().split()
  
        # Iterate through the list of words
        for i in range(len(words)):
            # Remove punctuations and special symbols from the word
            for ch in '!"#$%&()*+,-./:;<=>?<@[\\]^_`{|}~' :
                words[i] = words[i].replace(ch, "")
  
            # Convert the word to lowercase
            words[i] = words[i].lower()
  
            # Add the word to the dictionary with a frequency of 1 if it is not already in the dictionary
            if words[i] not in wordFreq:
                wordFreq[words[i]] = 1
  
            # Increase the frequency of the word by 1 in the dictionary if it is already in the dictionary
            else:
                wordFreq[words[i]] += 1
  
    # Close the file
    file.close()
  
    # Return the dictionary
    return wordFreq

  
if __name__ == "__main__":
    # Call the function to get frequency of the words in the file
    wordFreq = countFrequency("alice.txt")
  
    # Open file for writing
    outFile = open("most_frequent_alice.txt", "w")
  
    # Write the number of unique words to the file
    outFile.write("Total number of unique words in the file: " + str(len(wordFreq)) + "\n")
  
    # Write the top 20 most used words and their frequency to the file
    outFile.write("\nTop 20 most used words and their frequency:\n\n")
    outFile.write("{:<20} {}\n" .format("Word", "Frequency"))
    wordFreq = sorted(wordFreq.items(), key = lambda kv:(kv[1], kv[0]), reverse = True)
    for i in range(20):
        outFile.write("{:<20} {}\n" .format(wordFreq[i][0], str(wordFreq[i][1])))
  
    # Close the file
    outFile.close()

Upvotes: 1

Views: 1732

Answers (1)

Hani
Hani

Reputation: 170

file = open("alice.txt", "r")

You missed the quotation, and you might need to give the correct location of that text file too.

Upvotes: 3

Related Questions