让ArcGIS在文本字段中包含前导零?


9

我在本质上是5数字ID的文本字段中输入字符。我需要在值中包含前导零,但是每次我输入或计算字段时,都会删除前导零(即使字段属性说这是一个5个字符的文本字段)。

如何强制字段包含前导零?

Answers:


12

Python有一个内置的前导零。使用str.zfill()到前导零添加到文本字段。

my_string = "1"
print my_string.zfill(2)   # Prints 01

my_string = "1000"
print my_string.zfill(2)   # Prints 1000

(示例来自https://stackoverflow.com/a/21620624/5754917

因此,在字段计算器中,您只需要使用ID指定字段名称,然后用零填充即可

str(!myfield!).zfill(5)

在此处输入图片说明

最终结果:

在此处输入图片说明

切记将字段计算器切换为“ Python分析器”


好的,这似乎很简单。我试试看!谢谢。
CJSF '17

好的!这正是我所需要的,而且非常简单,我几乎感到很尴尬!非常感谢!
CJSF

3

只需将您的文本用引号引起来。如果处于VB脚本模式,则双引号;如果处于Python模式,则双引号或单引号。

解释:当您只输入数字时,您将为Field Calculator提供一个整数形式的值,该值将转换为字符串,以便您将其输入到字符串类型字段中。对于整数,前导零没有值也没有意义,因此将其省略。如果将其用引号引起来,您将传递一个字符串(该字符串已经是正确的数据类型),因此将其保留下来。

这也假定该字段实际上是“文本”类型。也许将其设置为“长整数”或“短整数”,也会导致这种现象。


谢谢,我想这也可以。但是,作为更大的半自动过程的一部分,我最终将需要从另一个字段的一部分中获取没有前导零的值。
CJSF

如果您可以编辑问题并添加更多详细信息以及您当前拥有的完整代码,我们可能会更好地为您提供帮助。听起来您只是在手动将值写入一堆行。
PhilippNagel

2

您可以使用Python代码块

在代码块中添加以下函数定义:

def addZero(value):
    if value <= 9:
        output = '0000' + str(value)
    elif value <= 99:
        output = '000' + str(value)
    elif value <= 999:
        output = '00' + str(value)
    elif value <= 9999:
        output = '0' + str(value)
    return output

您可以将其用作:

addZero(!Field!) # numeric field

要么

addZero(123) # for example

您需要使定义<=达到上限:)
MaryBeth

@MaryBeth是的,我的错。编辑
aldo_tapia

2

正如其他答案中提到的那样,您需要确保将数字转换为字符串。

如果您丢失了0或将它们放在数字字段中,则创建一个字符串列宽度为5的代码,只需输入以下Python命令:

str(!MYFIELD!).zfill(5)

@Midavalo拥有!我太慢了:D
gisnside '17
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.