Obtenir le chemin du projet ou du fichier de couches dans PyQGIS?

13

Je génère de nouveaux fichiers raster à partir de couches vectorielles sur un projet. Je voudrais les enregistrer dans le même répertoire que les fichiers de projet ou de couche.

Comment trouver ce chemin à l'aide de PyQGIS?

fccoelho
la source

Réponses:

17

Pour la console python:

QgsProject.instance().readPath("./") # also try "../"

Ou avec

dir(QgsProject.instance())

vous trouvez quelque chose comme

fileName()

Pour le plugin python (non testé!):

from PyQt4.QtGui import QMessageBox
from qgis.core import QgsProject
path_absolute = QgsProject.instance().readPath("./")
QMessageBox.information(None, "Title", "AP: " + unicode(path_absolute))
qräbnö
la source
14

Pour accéder à un chemin de fichier vectoriel, sur une couche active, ce code fonctionne bien dans la console Python:

>>>import os
>>>myfilepath= iface.activeLayer().dataProvider().dataSourceUri()
>>>myfilepath
u'/home/zeito/tiznados_canoa.tif'
>>>(myDirectory,nameFile) = os.path.split(myfilepath)
>>>myDirectory
u'/home/zeito'
>>>nameFile
u'tiznados_canoa.tif'

Il a été testé avec mon raster 'tiznados_canoa.tif' en tant que couche active.

xunilk
la source
3
Sachez que dans le cas d'une couche vectorielle, le chemin après le nom du fichier contient également l'id du tuyau et de la couche (C: /shapes/test.shp | layerid = 0). J'utilise path = path [: path.rfind ('|')] pour le supprimer.
Miro
8

Si vous souhaitez accéder à un chemin de fichier vectoriel, sur un calque actif, cela semble fonctionner:

myfilepath= os.path.dirname( unicode( qgis.utils.iface.activeLayer().dataProvider().dataSourceUri() ) ) ;
fic = myfilepath + "[% "FILE" %]"

puis pour ouvrir une image ou un texte situé dans le même répertoire que mylayer:

from PyQt4 import QtWebKit, QtCore ; vue=QtWebKit.QWebView() vue.setUrl( QtCore.QUrl( fic ) ) ; vue.show()
rha
la source
Réponse utile mais qu'en est-il du nom de fichier? Vous utilisez "[%" FILE "%]" mais je ne comprends pas ce que cela signifie ...
GM
1

J'ai testé cela sur QGIS 3.4
QgsProject.instance().fileName()

retournera le chemin d'accès complet au fichier

«C: /MyDirectory/18809_US66.qgz»

Cary H
la source