Отримання шляху до проекту чи файлу шару в 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" %]"

потім відкрити малюнок або текст, що знаходиться в тій самій папці, що і мій рівень:

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.