James Stroud wrote: > Andy wrote: >> Hi, the file below will print all the keywords in a file and also the >> line # of the keyword. What I couldn't figure out is to count those >> keywords per line. For example - "Line #1 has 3 keywords" >> >> Can I do like - >> >> total[j] = total[j] + numwords(k) >> "Line number %d has %d keywords" % (j, total[j]) >> >> Seems sort of "illegal" in Python? >> >> >> >> ------------------------------------------------- >> import keyword, sys, string, fileinput >> def numwords(s): >> list = string.split(s) >> return len(list) >> >> # Get the file name either from the command-line or the user >> if len(sys.argv) != 2: >> name = raw_input("Enter the file name: ") >> else: >> name = sys.argv[1] >> >> inp = open(name,"r") >> linelist = inp.readlines() >> total, words,lines = 0, 0, 0 >> >> for i in range(len(linelist)): >> line = linelist[i] >> tempwords = line.split() >> for k in tempwords: >> if keyword.iskeyword(k): >> total = total + numwords(k) >> j = i + 1 >> print" The word * %s * belongs in line number: %d" % (k, >> j) >> >> print "Total keywords in this file are: %d" %(total) >> > > You probably want something that goes a little like this: > > for i,line in enumerate(linelist): > for k in line.split(): > if keyword.iskeyword(k): > total += line.count(k) > print "The word '%s' belongs in line num: %d" % (k, i+1) > > print "Total keyords are: %d" % total > > James
Oops, that over-counts, I forgot to put a continue in. Also, keeping a cache of the split line will probably be faster. for i,line in enumerate(linelist): line = line.split() for k in line: if keyword.iskeyword(k): total += line.count(k) print "The word '%s' belongs in line num: %d" % (k, i+1) continue print "Total keyords are: %d" % total James -- http://mail.python.org/mailman/listinfo/python-list