Hi. I have a String Type field in a large attribute table. I want to add a "-0" a the end of each entry or "-1", "-2", etc. See examples below:
Example entries in this case would be:
CROOKED ST 1
CROOKED ST 2
CROOKED ST 3
CROOKED ST 4
CROOKED ST 5
CROOKED ST 6
CROOKED ST 7
CROOKED ST 8
CROOKED ST 9
CROOKED ST 10
How can I add the '-0' to the end of each entry so it'd look like:
CROOKED ST-01
CROOKED ST-02
CROOKED ST-03
CROOKED ST-04
CROOKED ST-05
CROOKED ST-06
CROOKED ST-07
CROOKED ST-08
CROOKED ST-09
CROOKED ST-10
Anyone know if this is possible? Even if I cant change the double digit values proceeding after the 10th entry it would be a great help.
Thanks!
Solved! Go to Solution.
Hello,
Here is a function / code block I wrote that does what you're describing:
def number_streets(street):
components = street.split(" ")
num = components[-1]
if len(num) == 1:
num = "-0" + num
else:
num = "-" + num
stname = " ".join(components[:-1])
result = stname + num
return result
If you want to test it out, here's an example of how I tested it:
sts = ["MY ST 1", "MY ST 2", "MY ST 10", "MY ST 41"]
for st in sts:
print(number_streets(st))
The results I got were:
MY ST-01
MY ST-02
MY ST-10
MY ST-41
For a field calculation, the expression would be:
number_streets(!YOUR_FIELD_NAME!)
I'd be interested to hear if you use this and/or if it works for your purposes.
Depending on a few things, you could do this with a regex calculation, or you can brute-force it.
Hi, thank you for the response. I have an answer for each of your questions:
1.) Yes the numbers are already present
2.) Yes, all numbers are per my first example throughout the dataset - always a space before the number.
3.) The highest number is 115 on one of the larger length roads in the dataset.
4.) There are 10 roadway types in total - they are all abbreviated: ST, PL, DR, RD, PKWY, PK, AVE, WAY, TER, and CT
If you think it's better to do it "manually" - I'll trust your judgement. Thanks again!
If the max number goes to 115, do you want the result to be "001" so that all the values are 3 characters.
No, I'd prefer the numbers to be "01" and then be 3 characters if necessary.
Hello,
Here is a function / code block I wrote that does what you're describing:
def number_streets(street):
components = street.split(" ")
num = components[-1]
if len(num) == 1:
num = "-0" + num
else:
num = "-" + num
stname = " ".join(components[:-1])
result = stname + num
return result
If you want to test it out, here's an example of how I tested it:
sts = ["MY ST 1", "MY ST 2", "MY ST 10", "MY ST 41"]
for st in sts:
print(number_streets(st))
The results I got were:
MY ST-01
MY ST-02
MY ST-10
MY ST-41
For a field calculation, the expression would be:
number_streets(!YOUR_FIELD_NAME!)
I'd be interested to hear if you use this and/or if it works for your purposes.
Thanks a bunch! That did exactly what I was trying to do. Will keep this in the back pocket for future uses.
Awesome, I'm glad!