3

I have two columns in a personal geodatabase table that I'm trying to add up (to a third field) using a python function in field calculator, however some of the string values are not real numbers.

e.g.

field1     field2
12.24      2
h3.3       4
xyz        1
932.33.32  3

I have a conditional statement that checks for letters, however I'm stuck on how to check for the two decimal character occurrence,

932.33.32

For the two decimal string example I just want to return the value of field2. Here is my code so far.

import re
def cal(field1, field2):
  #check for two decimal character occurrence
  elif re.search('[0-9]+', x):
    myvalue = float(field1) + float(field2)
    return myvalue
  else: 
    myvaluefinal = float(field1) + float(field2)
    return myvaluefinal

2 Answers 2

4

Given your use case, you could test for a "two decimal string" like this:

str_test = '123.456.789'
if len(str_test.split('.')[0::1]) == 3:
    print 'This is a string which contains two decimals... do something'

You would of course want to build in some more elaborate type and formatting logic, but this is the general idea.

1
  • Thanks, your code does work, however I could not figure out how to include it into my function. I posted another way to do it. Commented Jul 30, 2012 at 14:12
4

I figured out another way to do it, see code below:

def cal(x, x2):
  def isfloat(str):
    try: float(x)
    except ValueError: return False
    return True
  checkfloat = isfloat(x)
  if checkfloat == False:
    return x2
  elif checkfloat == True:
    myvaluefinal = float(x) + float(x2)
    return myvaluefinal
1
  • 1
    Is there any way the re.search part of this code will ever be executed? Commented Jul 30, 2012 at 15:13

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.