PyQGIS: loop nos campos do shapefile para renomeá-los usando substring
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
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()