Python-Programm, das das häufigste Wort in einer .txt-Datei findet. Muss das Wort und seine Anzahl ausgeben
Ab sofort habe ich eine Funktion, um die countChars-Funktion zu ersetzen,
<code>def countWords(lines): wordDict = {} for line in lines: wordList = lines.split() for word in wordList: if word in wordDict: wordDict[word] += 1 else: wordDict[word] = 1 return wordDict </code>
aber wenn ich das Programm starte, spuckt es diesen Gräuel aus (dies ist nur ein Beispiel, es gibt ungefähr zwei Seiten mit Wörtern mit einer riesigen Anzahl von Zahlen daneben)
<code>before 1478 battle-field 1478 as 1478 any 1478 altogether 1478 all 1478 ago 1478 advanced. 1478 add 1478 above 1478 </code>
Das bedeutet natürlich, dass der Code solide genug ist, um ausgeführt zu werden, aber ich bekomme nicht das, was ich will. Es muss gedruckt werden, wie oft sich jedes Wort in der Datei befindet (gb.txt, das ist die Gettysburg-Adresse). Offensichtlich ist jedes Wort in der Datei nicht genau 1478-mal vorhanden.
Ich bin ziemlich neu in der Programmierung, also bin ich ein bisschen ratlos.
<code>from __future__ import division inputFileName = 'gb.txt' def readfile(fname): f = open(fname, 'r') s = f.read() f.close() return s.lower() def countChars(t): charDict = {} for char in t: if char in charDict: charDict[char] += 1 else: charDict[char] = 1 return charDict def findMostCommon(charDict): mostFreq = '' mostFreqCount = 0 for k in charDict: if charDict[k] > mostFreqCount: mostFreqCount = charDict[k] mostFreq = k return mostFreq def printCounts(charDict): for k in charDict: #First, handle some chars that don't show up very well when they print if k == '\n': print '\\n', charDict[k] #newline elif k == ' ': print 'space', charDict[k] elif k == '\t': print '\\t', charDict[k] #tab else: print k, charDict[k] #Normal character - print it with its count def printAlphabetically(charDict): keyList = charDict.keys() keyList.sort() for k in keyList: #First, handle some chars that don't show up very well when they print if k == '\n': print '\\n', charDict[k] #newline elif k == ' ': print 'space', charDict[k] elif k == '\t': print '\\t', charDict[k] #tab else: print k, charDict[k] #Normal character - print it with its count def printByFreq(charDict): aList = [] for k in charDict: aList.append([charDict[k], k]) aList.sort() #Sort into ascending order aList.reverse() #Put in descending order for item in aList: #First, handle some chars that don't show up very well when they print if item[1] == '\n': print '\\n', item[0] #newline elif item[1] == ' ': print 'space', item[0] elif item[1] == '\t': print '\\t', item[0] #tab else: print item[1], item[0] #Normal character - print it with its count def main(): text = readfile(inputFileName) charCounts = countChars(text) mostCommon = findMostCommon(charCounts) #print mostCommon + ':', charCounts[mostCommon] #printCounts(charCounts) #printAlphabetically(charCounts) printByFreq(charCounts) main() </code>