6 votos

¿Acceder a la tabla de atributos dentro del shapefile y reemplazar los valores?

Me gustaría encontrar un Python script que acceda a una tabla de atributos dentro de un shapefile y actualice o reemplace los registros dentro de una columna de campo. Más específicamente, me gustaría utilizar la expresión de reemplazo para convertir un registro de la tabla como "123-456-789" a "123456789". Tengo muchos registros que procesar y me gustaría saber cuál es el mejor enfoque para realizar esta tarea utilizando Python.

13voto

shsteimer Puntos 8749

Lo que necesitas es un ActualizarCursor .

La función UpdateCursor crea un cursor que permite actualizar o eliminar filas en la clase de característica, archivo shape o tabla especificados. El cursor cursor coloca un bloqueo en los datos que permanecerá hasta que el script finalice o se elimine el objeto cursor de actualización.

Su código sería algo parecido a lo siguiente:

import arcpy

# Create update cursor for feature class 
# 
rows = arcpy.UpdateCursor("path_to_your_data_here") 

for row in rows:
    # Fields from the table can be dynamically accessed from the row object.
    #   Here, the field is named targetField as I don't know your field name
    targetRow = row.targetField #Assigns value of targetField to string
    row.targetField = targetRow.translate(None, '-') #Removes the dashes
    rows.updateRow(row) 

# Delete cursor and row objects to remove locks on the data 
# 
del row 
del rows

Si no tiene ArcPy, puede utilizar dbfpy para acceder directamente y editar los atributos del archivo dbf del archivo shape. La sintaxis es bastante simple:

from dbfpy import dbf

db = dbf.Dbf("your_file.dbf")

#Editing a value, assuming you want to edit the first field of the first record
rec = db[0]
rec["FIRST_FIELD"] = "New value"
rec.store()
del rec
db.close()

5voto

Rihan Meij Puntos 362

Alternativamente, y de forma muy directa, podría abrir la tabla de la base de datos (dbf) que viene con su forma en Excel o Libreoffice Calc. Deberían ser totalmente editables y por lo tanto usted puede simplemente eliminar todos los guiones en varias columnas.

0 votos

Las tablas DBF no se pueden editar

3voto

knowncitizen Puntos 600

También puede utilizar la calculadora de campo con la expresión de Python !Field!.replace('-','') .

0 votos

La calculadora de campo funcionaría bien, pero no creo que sea tan rápida como un cursor de actualización. Y el método translate es más rápido que replace ( enlace )

1 votos

El operador dice que tiene muchos registros para convertir, pero no especifica si necesita hacer más de un archivo .shp o incluso campos, por lo que la respuesta más simple es utilizar la calculadora de campo en lugar de escribir script con el cursor de actualización. Es bueno saber que translate funcionaría más rápido que el método replace.

1voto

Aaron Puntos 25882

Utilizaría un módulo de acceso a datos da Actualizar Cursor y el replace() método para lograrlo. El siguiente es el método preferido (nuevo) para usar un Cursor de Actualización.

import arcpy

shp = r'C:\path\to\shapefile.shp'

with arcpy.da.UpdateCursor(shp, "your_field") as cursor:
    for row in cursor:
        row[0].replace("-", "")
        cursor.updateRow(row)

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X