Ottenere il percorso del progetto o del file di layer in PyQGIS?


13

Sto generando nuovi file raster da livelli vettoriali su un progetto. Vorrei salvarli nella stessa directory dei file di progetto o di livello.

Come trovo questo percorso usando PyQGIS?

Risposte:


17

Per la console Python:

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

O con

dir(QgsProject.instance())

trovi qualcosa del genere

fileName()

Per il plugin python (non testato!):

from PyQt4.QtGui import QMessageBox
from qgis.core import QgsProject
path_absolute = QgsProject.instance().readPath("./")
QMessageBox.information(None, "Title", "AP: " + unicode(path_absolute))

14

Per accedere a un percorso di file vettoriale, su un livello attivo, questo codice funziona bene in Python Console:

>>>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'

È stato testato con il mio raster "tiznados_canoa.tif" come livello attivo.


3
In caso di layer vettoriale, il percorso dopo il nome del file contiene anche ID pipe e layer (C: /shapes/test.shp | layerid = 0). Uso path = path [: path.rfind ('|')] per rimuoverlo.
Miro,

8

Se vuoi accedere a un percorso di file vettoriale, su un livello attivo, questo sembra funzionare:

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

quindi per aprire un'immagine o un testo situato nella stessa directory di mylayer:

from PyQt4 import QtWebKit, QtCore ; vue=QtWebKit.QWebView() vue.setUrl( QtCore.QUrl( fic ) ) ; vue.show()

Risposta utile ma per quanto riguarda il nome del file? Usi "[%" FILE "%]" ma non capisco cosa significhi ...
GM

1

Ho provato questo su QGIS 3.4
QgsProject.instance().fileName()

restituirà l'intero percorso al file

'C: /MyDirectory/18809_US66.qgz'

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.