13

I am generating new raster files from vector layers on a project. I would like to save them in the same directory as the project or layer files.

How do I find this path using PyQGIS?

17

For python console:

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

Or with

dir(QgsProject.instance())

you find something like

fileName()

For python plugin (not tested!):

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

To access a vector file path, on a active layer, this code works well 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'

It was tested with my 'tiznados_canoa.tif' raster as a active layer.

  • 3
    Be aware in case of vector layer the path after file name contains also pipe and layer id (C:/shapes/test.shp|layerid=0). I use path = path [:path.rfind('|')] to remove it. – Miro Nov 9 '16 at 5:24
8

If you want to access a vector file path, on a active layer, this seems to work:

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

then to open a picture or text located in same directory as mylayer:

from PyQt4 import QtWebKit, QtCore ; vue=QtWebKit.QWebView() vue.setUrl( QtCore.QUrl( fic ) ) ; vue.show()
  • Useful answer but what about the file name? You use "[% "FILE" %]" but I don't understand what does it means... – G M Aug 19 '13 at 20:59
0

I did test this on QGIS 3.4
QgsProject.instance().fileName()

will return the entire path to the file

'C:/MyDirectory/18809_US66.qgz'

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.