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