Changer le nom d'affichage de la couche avec PyQGIS?

8

J'ai fait un traitement par lots de plusieurs couches vectorielles et maintenant le nom d'affichage de chaque fichier est "dissous" lors de l'accès à la layer.name()fonction dans QGIS. J'ai lu cette réponse de underdark à Changer le nom de la couche du vecteur de sortie du script de traitement dans QGIS? , que je peux mettre le nom sur le nom du fichier mais malheureusement trop tard.

Je peux obtenir tous les fichiers de mon projet dans une liste avec

layers = iface.mapCanvas().layers()

et tous les noms avec ceci:

names = [layer.name() for layer in QgsMapLayerRegistry.instance().mapLayers().values()]

Avec l'aide de cette réponse à Obtenir le chemin du projet ou du fichier de couche dans PyQGIS? , Je peux obtenir les noms du fichier avec lequel je travaille:

import os 
real_names = []
for li in layers:
   (myDirectory,nameFile) = os.path.split(li.dataProvider().dataSourceUri())
   real_names.append(nameFile.split("|")[0]

La lecture du docu API pour QgsVectorLayer ne m'a pas aidé. Ce que je veux, c'est renommer les fichiers pour afficher le nom de fichier comme nom d'affichage. Comment l'archiver avec la console python?

Rire
la source

Réponses:

7

Vous pouvez utiliser quelque chose comme le suivant pour renommer tous les calques en leur nom de fichier respectif (à l'exception de l'extension):

import os

for layer in QgsMapLayerRegistry.instance().mapLayers().values():
    basename = os.path.splitext(os.path.basename(layer.source()))[0]
    layer.setLayerName(basename)
Joseph
la source