I am new to python. I am using a model to automate a data update process. Part of the model is to calculate a new field by concatenating 3 other fields and left trimming to remove white space as needed. Below is the VB expression. When I use python to automatically run this model it fails at the expression to calculate the field. Below is the VB expression. I cannot find an example of how this would look as a python expression. Can anyone help?
FullStreet =
LTrim( [LOCN] &" " & LTrim( [LOCD] & " " & [LOCS]))
Any help would be greatly appreciated.
Sincerely,
Nita L Hester
So true. Thanks for your help. I will keep working on it too. I added and (input3.strip() to the first if.
Nita
At this point it is helpful to others for you to present some example data along with what you expect the results to look like. If the example data can be extracts from your actual data set, all the better.
Here is what the data looks like after running the following code:
As you can see if there is no LOCN or LOCD it should just put the value from LOCS in FullStreet. It is leaving it blank.
Trentwood PL should be the value in FullStreet. The other to elif statements are working though.
Thanks,
Nita
Also just noticed that if LOCN has no value but LOCD and LOCS do have values that is not working either.
Sorry for this, I am so new to python (2 weeks) that I am not sure what to do.
Nita
as a suggestion, why not highlight all the records that don't work properly, so that they can all be seen. This looks like another example of trying to develop one field calculator expression or script that applies to all conditions when several smaller ones might work better. This does entail working incrementally but sometimes small steps make progress faster than one big leap.
Ok sounds good. maybe I should start over. I have myself very confused.
First I am running a model with the Caluclate Field in it.
I have a VB expression that does work correctly. See below.
Result
When I try to run the model from the toobox using a python script it will not run the VB expression.
So I need to convert this expression to python.
The last set of code used was:
and the result was:
The Rycroft St and S Baynes Rd are not populating.
So with this information can you help please? Thanks for any help you can give.
Randy has a point
Luke list comprehension aand Joshua's generator expression are coming close. In combination with a check for nulls and stripping of string spaces, I think you have something way simpler.
You didn't appear to try Joshua's expression? give it whirl and report the cases that it failed on.
I want to see an example Luke's
Combine the ideas with Randy's suggestion as well
As a desparate gasp... the final joined result can be parsed for double spaces
Examples
>>> " ".join([ str(i) for i in ["a",None,"b",1] if i ])
'a b 1'
AND now for something completely ridiculous........
>>> " ".join([ str(i).strip() for i in ["a",None,"b"," ", 1] if i ]).replace(" "," ") 'a b 1'
Also, does Geoprocessing >> Results >> Current Session provide any error messages after trying the code?
No the code runs without error codes
You may need to add a check for null values before joining. Nulls may also affect the strip function.
I think Dan suggested using something like this in a different thread on joining nulls:
" ".join([str(i) for i in [ !input1!, !input2!, !input3!] if i])
Yes, I was trying that but do not know what to put where the " " are in the expression. Can you give me an example for how the code should look.