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
ベクターレイヤーの場合、ファイル名の後のパスにもパイプとレイヤー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'

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.