convert string number to real number - ValueError: invalid literal for int() with base 10: '"2"'

davidj411 davidj411 at gmail.com
Thu Feb 28 17:56:10 EST 2008


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'>



More information about the Python-list mailing list