PyQGIS: loop nos campos do shapefile para renomeá-los usando substring

Aug 22 2020

Estou tentando renomear vários nomes de campo (cerca de 150) de um arquivo de forma no QGIS. Seus nomes são diferentes, mas todos eles terminam _xf20e eu gostaria de remover essa parte para cada um deles.

Pesquisei outros tópicos que poderiam ajudar e encontrei este: Renomear campos do shapefile usando PyQGIS 3 com o código:


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 este: Exclua todos os campos com a string "RAWI" usando QGIS Python

Mas mesmo que seja um começo, sou um iniciante em Python e não encontro uma maneira de adaptá-los para o meu caso.

Prefiro não editar cada campo manualmente.

Respostas

3 BenW Aug 22 2020 at 11:36

O seguinte deve funcionar cortando seus nomes de campo antigos para retornar tudo antes dos últimos 5 caracteres'_xf20 'que você deseja remover.

Embora eu tenha testado isso no QGIS 3.14.15 e funcionado bem para mim, faça uma cópia de backup do seu arquivo de forma primeiro, caso algo dê errado.

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()