获取项目的路径,还是PyQGIS中的图层文件?


13

我正在从项目的矢量层生成新的栅格文件。我想将它们保存在与项目或图层文件相同的目录中。

如何使用PyQGIS找到此路径?

Answers:


17

对于python控制台:

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

或搭配

dir(QgsProject.instance())

你会发现类似

fileName()

对于python插件(未经测试!):

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

14

要访问矢量文件路径,请在活动层上的以下代码在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'

已使用“ tiznados_canoa.tif”栅格作为活动图层对其进行了测试。


3
请注意,在矢量图层的情况下,文件名后的路径也包含管道和图层ID(C:/shapes/test.shp | layerid = 0)。我使用path = path [:path.rfind('|')]将其删除。
米罗

8

如果要在活动层上访问矢量文件路径,这似乎可行:

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

然后打开与mylayer位于同一目录中的图片或文本:

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

有用的答案,但是文件名呢?您使用“ [%“ FILE”%]“,但我不明白这意味着什么...
GM

1

我在QGIS 3.4上测试过
QgsProject.instance().fileName()

将返回文件的完整路径

'C:/MyDirectory/18809_US66.qgz'

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.