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