25 votos

¿Obtener la ruta del proyecto o del archivo de capa en PyQGIS?

Estoy generando nuevos archivos rasterizados a partir de capas vectoriales en un proyecto. Me gustaría guardarlos en el mismo directorio que los archivos del proyecto o de las capas.

¿Cómo puedo encontrar este camino utilizando PyQGIS?

24voto

Patches Puntos 201

Para la consola de python:

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

O con

dir(QgsProject.instance())

encuentras algo como

fileName()

Para el plugin de python (¡no probado!):

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

20voto

Yada Puntos 9489

Para acceder a la ruta de un archivo vectorial, en una capa activa, este código funciona bien en la consola de 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'

Se ha probado con mi trama 'tiznados_canoa.tif' como capa activa.

6 votos

Tenga en cuenta que en el caso de la capa vectorial la ruta después del nombre del archivo contiene también la tubería y el ID de la capa (C:/formas/prueba.shp|layerid=0). Yo uso path = path [:path.rfind('|')] para eliminarlo.

12voto

nitinsavant Puntos 6

En QGIS 2.x, 3.0 y 3.1:

Ruta del proyecto:

QgsProject.instance().fileName()  # C:/test/sample_project.qgs

Ruta de la carpeta del proyecto:

QgsProject.instance().homePath() # C:/test

En QGIS 3.2+:

Ruta del proyecto:

QgsProject.instance().fileName() 
# OR
QgsProject.instance().absoluteFilePath() # C:/test/sample_project.qgz 

Ruta de la carpeta del proyecto:

QgsProject.instance().homePath()
# OR
QgsProject.instance().absolutePath()   # C:/test

8voto

ch_de Puntos 173

Si quiere acceder a la ruta de un archivo vectorial, en una capa activa, esto parece funcionar:

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

para abrir una imagen o un texto situado en el mismo directorio que mylayer:

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

0 votos

Respuesta útil, pero ¿qué pasa con el nombre del archivo? Usted utiliza "[% "FILE" %]" pero no entiendo qué significa...

5voto

DJYod Puntos 158

He probado esto en QGIS 3.4
QgsProject.instance().fileName()

devolverá la ruta completa del archivo

'C:/MiDirectorio/18809_US66.qgz'

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X