QgsProcessingException ejecutando JoinAttributesByLocation

Sep 18 2020

Estoy tratando de ejecutar el siguiente código

import os
directory_in_str='/Users/name/Desktop/test/'
directory = os.fsencode(directory_in_str)
tre='?type=csv&quote=&escape=&trimFields=Yes&skipEmptyFields=Yes&maxFields=10000&detectTypes=yes&xyDms=yes&xField=lon&yField=lat&crs=EPSG:4326&spatialIndex=yes&subsetIndex=no&watchFile=no'
start='file:///Users/name/Desktop/test/'
for file in os.listdir(directory):
     filename = os.fsdecode(file)
     if filename.endswith(".csv"): 
        path_to_csv=start+filename+tre
        processing.run("qgis:joinattributesbylocation", {'INPUT':path_to_csv,'JOIN':'/Users/name/Desktop/gis/NUTS_uppdelade/NUTS_ID_SE11.gpkg|layername=NUTS_ID_SE11','PREDICATE':[0,5],'JOIN_FIELDS':[],'METHOD':0,'DISCARD_NONMATCHING':True,'PREFIX':'','OUTPUT':'/Users/name/Desktop/gis/regn/vikter/NUTS_ID_SE111900Q1.gpkg'})

Mi intención es hacer que el script ejecute los atributos de combinación por ubicación para todos los archivos en la carpeta de prueba. Sin embargo, devuelve el siguiente error:

exec(open('/var/folders/ks/1x_p2hz95jldm5xvpjfg0gmm0000gn/T/tmpdq2z8ia3.py'.encode('utf-8')).read())
Traceback (most recent call last):
  File "/Applications/QGIS3.10.app/Contents/Frameworks/Python.framework/Versions/Current/lib/python3.7/code.py", line 90, in runcode
    exec(code, self.locals)
  File "<input>", line 1, in <module>
  File "<string>", line 10, in <module>
  File "/Applications/QGIS3.10.app/Contents/MacOS/../Resources/python/plugins/processing/tools/general.py", line 106, in run
    return Processing.runAlgorithm(algOrName, parameters, onFinish, feedback, context)
  File "/Applications/QGIS3.10.app/Contents/MacOS/../Resources/python/plugins/processing/core/Processing.py", line 137, in runAlgorithm
    raise QgsProcessingException(msg)
_core.QgsProcessingException: Kan inte köra algoritm
Kunde inte läsa in källager för INPUT: file:///Users/name/Desktop/test/1900Q1.csv?type=csv&quote=&escape=&trimFields=Yes&skipEmptyFields=Yes&maxFields=10000&detectTypes=yes&xyDms=yes&xField=lon&yField=lat&crs=EPSG:4326&spatialIndex=yes&subsetIndex=no&watchFile=no ej hittad

Lo que significa que no se pudo encontrar la capa. Realmente no puedo entender por qué recibo este mensaje de error, ya que funciona al reemplazar path_to_csv con una copia y pegado de las cadenas que se supone que debe combinar.

Así que supongo que especifico el path_to_csv incorrecto de alguna manera. ¿Algún consejo?

Edición 1: si es relevante, este es el código que he ejecutado correctamente:

processing.run("qgis:joinattributesbylocation", {'INPUT':'file:///Users/name/Desktop/test/1900Q1.csv?type=csv&quote=&escape=&trimFields=Yes&skipEmptyFields=Yes&maxFields=10000&detectTypes=yes&xyDms=yes&xField=lon&yField=lat&crs=EPSG:4326&spatialIndex=yes&subsetIndex=no&watchFile=no','JOIN':'/Users/name/Desktop/gis/NUTS_uppdelade/NUTS_ID_SE11.gpkg|layername=NUTS_ID_SE11','PREDICATE':[0,5],'JOIN_FIELDS':[],'METHOD':0,'DISCARD_NONMATCHING':True,'PREFIX':'','OUTPUT':'/Users/name/Desktop/gis/regn/vikter/NUTS_ID_SE111900Q1.gpkg'})

Respuestas

2 timpan Sep 18 2020 at 20:41

No especifiqué que era un QgsVectorLayer.

vlayer = QgsVectorLayer(path_to_csv, "temp", "delimitedtext")
processing.run("qgis:joinattributesbylocation", {'INPUT':vlayer,'JOIN':'/Users/name/Desktop/gis/NUTS_uppdelade/NUTS_ID_SE11.gpkg|layername=NUTS_ID_SE11','PREDICATE':[0,5],'JOIN_FIELDS':[],'METHOD':0,'DISCARD_NONMATCHING':True,'PREFIX':'','OUTPUT':'/Users/name/Desktop/gis/regn/vikter/NUTS_ID_SE111900Q1.gpkg'}

¡Ahora funciona sin problemas!