davidj411 wrote:
> i am parsing a cell phone bill to get a list of all numbers and the
> total talktime spend on each number.
> 
> i already have a unique list of the phone numbers.
> now i must go through the list of numbers and add up the totals for
> each number.
> on the bill, each line has a few fields,one field containing the phone
> number, another field containing the number of minutes on that call.
> the bill is comma delimited.
> 
> here is the function i wrote to get one number at a time's total
> talktime.
> 
> def getsinglenumbertalktime(number,talktime):
>       for line in file[0:-2]:
>        if number in line:
>               li=line.split(',')
>               if len(li)==6 and li[5]!="Minutes" :
>                       print "talktime type: " + str(type (talktime))
>                       #li[5]=fpformat.fix(li[5],0)
> 
>                       print li[5] + "li[5] type: " + str(type(li[5]))
>                       newvar = int(li[5])
>                       print (type(newvar))
>                       print li[5]
>                       talktime = talktime + li[5]
>                       return talktime
> 
> here is the output with error that i get back.
> 
> talktime type: <type 'int'>
> "2"li[5] type: <type 'str'>
> Traceback (most recent call last):
>   File "<stdin>", line 1, in <module>
>   File "c:\path\inprog\all_t_mob_nums.py", line 74, in <module>
>     getsinglenumbertalktime('"800-218-2644"',talktime)
>   File "c:\path\inprog\all_t_mob_nums.py", line 66, in
> getsinglenumbertalktime
>     newvar = int(li[5])
> ValueError: invalid literal for int() with base 10: '"2"'
> 
> 
> here is the question:
> 
> How can i convert a string number like "2" to a true number that can
> be added.
> I have tried using pfformat, float(), and int() - all with no good
> results.
> this seems like is should be simple, but it just plain isn't.
> 
> 
> I actually found a good solution.
> basically, take each entry and add it to a list.
> then iterate through the list , converting each item to int().
> then add them to sum them all up.
> 
> FINAL SOLUTION:
> def getsinglenumbertalktime(number,talktime):
>       num_of_calls=0
>       num_mins=[]
>       for line in file[0:-2]:
>               #print "LINE: " + line
>               #print number in line
>               if number in line:
>                       num_of_calls +=  1
>                       #print number,num_of_calls
>                       li=line.strip("\n")
>                       #print "stripped:" + line
>                       li=li.split(',')
>                       #print "split: " + str(li)
>                       #print "len of li: " + str(len(li)) + str(num_of_calls)
>                       if len(li)==7 and li[5]!="Minutes" :
>                               #print "talktime type: " + str(type (talktime))
>                               #print li[4] + "li[4] type: " + str(type(li[5]))
>                               #newvar = fpformat.fix(li[4],0)
>                               #print (type(newvar))
>                               #print "len 7: " + str(type(li[6]))
>                               num_mins.append(li[6])
>                               #talktime = talktime + int(a)
> 
>                       if len(li)==6 and li[5]!="Minutes" :
>                               #print "talktime type: " + str(type (talktime))
>                               #print li[5] + "li[5] type: " + str(type(li[5]))
>                               #newvar = fpformat.fix(li[4],0)
>                               #print (type(newvar))
>                               #print "len 6: " + str(type(li[5]))
>                               num_mins.append(li[5])
>                               #talktime = talktime + int(a)
>                               #return talktime , num_of_calls
>       x=0
>       #print "this" + str(number) + str(num_mins)
>       for a in num_mins:
>               b=int(a)
>               x=x+b
>       print str(number), str(x), str(type(x))
> 
> output should look like this (parts of script are not included)
> 555-555-5555 replaced the innocent :P):
> 555-555-5555 19 <type 'int'>
> 555-555-5555 6 <type 'int'>
> 555-555-5555 3 <type 'int'>
> 555-555-5555 3 <type 'int'>
> 555-555-5555 2 <type 'int'>
> 555-555-5555 52 <type 'int'>

If the file is quote and comma delimited, you should be using the csv module to 
do your reading and stripping of the quotes.  Should make things MUCH easier.

-Larry
-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to