PyQGIS: ciclo sui campi dello shapefile per rinominarli usando la sottostringa

Aug 22 2020

Sto cercando di rinominare più nomi di campo (circa 150) di uno shapefile in QGIS. I loro nomi sono diversi ma finiscono tutti _xf20e vorrei rimuovere questa parte per ciascuno di essi.

Ho cercato altri argomenti che potrebbero aiutare e ho trovato questo: Rinomina i campi dello shapefile usando PyQGIS 3 con il codice:


layer = iface.activeLayer()

# Open editing session
layer.startEditing()

# Rename field
for field in layer.fields():
    if field.name() == 'oldName':
        idx = layer.fields().indexFromName(field.name())
        layer.renameAttribute(idx, 'newName')

# Close editing session and save changes
layer.commitChanges()

e questo: Elimina tutti i campi con la stringa "RAWI" usando QGIS Python

Ma anche se è un inizio, sono un principiante con Python e non trovo un modo per adattarli al mio caso.

Preferirei non modificare manualmente ogni singolo campo.

Risposte

3 BenW Aug 22 2020 at 11:36

Quanto segue dovrebbe funzionare tagliando i vecchi nomi dei campi per restituire tutto ciò che precede gli ultimi 5 caratteri "_xf20 "che desideri rimuovere.

Anche se l'ho testato in QGIS 3.14.15 e ha funzionato bene per me, per favore fai prima una copia di backup del tuo shapefile nel caso qualcosa vada storto.

layer = iface.activeLayer()

layer.startEditing()

for field in layer.fields():
    if field.name().startswith('Z10'):
        idx = layer.fields().lookupField(field.name())
        new_name = field.name()[:-5]
        layer.renameAttribute(idx, new_name)

layer.commitChanges()