2

I'm trying to merge all shapefiles in a directory using the following Python script from the console in QGIS 3.4.

The script was sourced from the following question:

Merging all vector files within directory with QGIS?

gis.stackexchange.com/questions/327398/merging-all-vector-files-within-directory-with-qgis

import glob, os, processing
path_to_shp = "P:/GIS/Basemapping/Topographic Area Schema 1/"
os.chdir(path_to_shp)
filelist = []
for fname in glob.glob("*.shp"):
    uri = path_to_shp + fname
    filelist.append(uri)

fileliststring = ';'.join(filelist)
processing.run("qgis:mergevectorlayers", fileliststring, "P:/GIS/Basemapping/Topographic Area Schema 1/merged.shp")

Running this results in:

TypeError: QgsProcessingAlgorithm.checkParameterValues(): argument 1 has unexpected type 'str'

The first time I ran into this I checked the input parameters for the algorithm using:

processing.algorithmHelp("qgis:mergevectorlayers")

Based on the algorithmHelp I assumed I should be passing a list of filepaths as input:

list[str]: list of layer sources

Running the following modification of the original script:

import glob, os, processing
path_to_shp = "P:/GIS/Basemapping/Topographic Area Schema 1/"
os.chdir(path_to_shp)
filelist = []
for fname in glob.glob("*.shp"):
    uri = path_to_shp + fname
    filelist.append(uri)

processing.run("qgis:mergevectorlayers", filelist, "P:/GIS/Basemapping/Topographic Area Schema 1/merged.shp")

results in the following error:

TypeError: QgsProcessingAlgorithm.checkParameterValues(): argument 1 has unexpected type 'list'

I feel I must be missing something obvious here. I've tried passing a list and a string of filepaths but neither seems to work. Can anyone help?

2

That's no how you call processing.run. You should check out the official QGIS documentation

Basicaly, processing.run expects the algorithm identifier, and a dictionnary containing the processing parameters. This should work:

processing.run(
    "qgis:mergevectorlayers",
    {
        "LAYERS": filelist,
        "OUTPUT": "P:/GIS/Basemapping/Topographic Area Schema 1/merged.shp",
    },
)
| improve this answer | |
  • Works perfectly. Thanks for the help. – Stuart Jan 24 at 15:17

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.