Counting

James Stroud jstroud at mbi.ucla.edu
Sun Apr 29 16:15:35 EDT 2007


James Stroud wrote:
> 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

I should really wait until I've had some coffee. Not continue, but break!


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)
       break

print "Total keyords are: %d" % total



More information about the Python-list mailing list