Abrufen des Projektpfads oder der Layer-Datei in PyQGIS?


13

Ich generiere neue Rasterdateien aus Vektorebenen in einem Projekt. Ich möchte sie im selben Verzeichnis wie das Projekt oder die Layer-Dateien speichern.

Wie finde ich diesen Pfad mit PyQGIS?

Antworten:


17

Für die Python-Konsole:

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

Oder mit

dir(QgsProject.instance())

du findest so etwas wie

fileName()

Für Python-Plugin (nicht getestet!):

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

14

Um auf einen Vektordateipfad auf einer aktiven Ebene zuzugreifen, funktioniert dieser Code in Python Console gut:

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

Es wurde mit meinem Raster "tiznados_canoa.tif" als aktive Ebene getestet.


3
Beachten Sie bei Vektorebenen, dass der Pfad nach dem Dateinamen auch die Pipe- und Layer-ID enthält (C: /shapes/test.shp | layerid = 0). Ich benutze path = path [: path.rfind ('|')], um es zu entfernen.
Miro

8

Wenn Sie auf einer aktiven Ebene auf einen Vektordateipfad zugreifen möchten, scheint dies zu funktionieren:

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

dann, um ein Bild oder einen Text zu öffnen, der sich in demselben Verzeichnis wie mylayer befindet:

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

Nützliche Antwort, aber was ist mit dem Dateinamen? Sie verwenden "[%" FILE "%]", aber ich verstehe nicht, was es bedeutet ...
GM

1

Ich habe dies auf QGIS 3.4 getestet
QgsProject.instance().fileName()

Gibt den gesamten Pfad zur Datei zurück

'C: /MyDirectory/18809_US66.qgz'

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.