基本的に私が行っていることを行う投稿をたくさん見てきましたが、残念ながら、私が望んでいない出力を取得し続ける理由がわかりません。問題は、特定の単語が Excel ファイルに表示されるたびに辞書をインクリメントしようとしていることですが、単語のすべてのインスタンスが現在のコードのように新しい単語として扱われます。たとえば、「the」はファイル内で最大 50 回発生しますが、出力では「the」が多くの異なる行に表示され、インスタンスごとにカウントが「1」になります。実際には、「50」のカウントで「the」を1回リストしたい場合。説明をいただければ幸いです。これが私のコードです:
import csv
import string
filename = "input.csv"
output = "output1.txt"
def add_word(counts, word):
word = word.lower()
#the problem is here, the following line never runs
if counts.has_key(word):
counts[word] +=1
#instead, we always go to the else statement...
else:
counts[word] = 1
return counts
def count_words(text):
word = text.lower()
counts = {}
add_word(counts, word)
return counts
def main():
infile = open(filename, "r")
input_fields = ('name', 'country')
reader = csv.DictReader(infile, fieldnames = input_fields)
next(reader)
first_row = next(reader)
outfile = open(output, "w")
outfile.write("%-18s%s\n" %("Word", "Count"))
for next_row in reader:
full_name = first_row['name']
word = text.split(' ',1)[0]
counts = count_words(word)
counts_list = counts.items()
counts_list.sort()
for word in counts_list:
outfile.write("%-18s%d\n" %(word[0], word[1]))
first_row = next_row
if __name__=="__main__":
main()