En ArcInfo 10.1 tengo una tabla para cada estado con valores de códigos postales. Los códigos postales de 5 dígitos que comienzan con "0" se han reducido a 4 dígitos. No puedo averiguar cómo agregar un "0" al principio de todos los valores en la tabla. He intentado varias cálculos de campo pero simplemente no logro hacerlo bien.
Respuestas
¿Demasiados anuncios?Como mencionó Brian, deberá almacenar los datos en un campo de texto. Luego, el cálculo del campo es: right("00000" + [Existing_ZIP_CODE_FIELD],5)
esto asegurará que tenga todos los ceros iniciales necesarios hasta 5 caracteres.
Como @Brian ha dicho, el campo tendrá que ser de tipo texto para mantener el cero a la izquierda. Aquí tienes un ejemplo rápido y básico en python:
import arcpy
#añadir ruta al archivo de forma, clase de entidad
fc = "..."
arcpy.AddField_management(fc, "ZIP5", "TEXT", "", "", 5)
rows = arcpy.UpdateCursor(fc)
for row in rows:
#row.ZIP4 debería ser cambiado al campo
#con tu CÓDIGO POSTAL, por ejemplo: row.ZIP_CODE
new_value = str(row.ZIP4)[:5].rjust(5,"0")
row.ZIP5_2 = new_value
rows.updateRow(row)
del row
del rows
Esto hace uso de UpdateCursor, Add Field (Data Management), y formato de cadena en Python, particularmente .rjust()
Creo que Cómo: Mantener ceros iniciales para códigos postales en tablas de atributos de ArcGIS tiene la información que necesitas sobre cómo mantener ceros iniciales para el campo de código postal.
Los códigos postales son exclusivamente números, y a menudo se almacenan en un campo numérico (formateado). Cuando se ingresa un código postal con ceros iniciales en un campo numérico, los ceros iniciales se omiten, creando así un código postal incorrecto. ArcMap intenta igualar el tipo de dato con los tipos de campo adecuados para las tablas importadas, a menudo haciendo que los códigos postales se designen a un campo numérico.
Usando python no el campo calculado pero aún funciona.
Utilizado para añadir dinámicamente ceros principales a un campo basado en el número deseado de ceros principales y la longitud de la cadena con manejo básico de errores
Por ejemplo:
- 2 = 00002
- 89 = 00089
- 187 = 00187
- 2098 = 02098
Note que el campo debe ser Texto de lo contrario no tiene sentido ejecutar esto.
Ejecutar en ArcMap
fc_name = 'NOMBRE'
fields = ["NOMBRE_CAMPO"]
longitud_deseada = 5
with arcpy.da.UpdateCursor(fc_name, fields) as cursor:
for row in cursor:
if row[0].isdigit():
if len(row[0]) < longitud_deseada:
row[0] = row[0].zfill(longitud_deseada)
print row
cursor.updateRow(row)
elif len(row[0]) > longitud_deseada:
print ("> Longitud - Verificar manualmente: " + row[0])
else:
print ("NAN - Verificar manualmente: " + row[0])
print ("Terminado")
- Ver respuestas anteriores
- Ver más respuestas