Получение пути проекта или файла слоя в PyQGIS?


13

Я создаю новые растровые файлы из векторных слоев в проекте. Я хотел бы сохранить их в том же каталоге, что и файлы проекта или слоя.

Как мне найти этот путь с помощью PyQGIS?

Ответы:


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
Помните, что в случае векторного слоя путь после имени файла содержит также идентификатор канала и слоя (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'

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.