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'>
-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to