On 19/08/18 22:19, Nikos Alexandris wrote:
If I am not wrong, all use cases of `read_command()` [0, 1],
in (at least) the grass-addons repository, do not consider an output
from `r.category` which includes labels.

[0] 
https://grass.osgeo.org/grass74/manuals/libpython/script.html?highlight=read_command#script.core.read_command
[1] 
https://grass.osgeo.org/grass75/manuals/libpython/script.html?highlight=read_command#script.core.read_command


I work on such a case where category numbers come along with label strings.
To read category numbers, I came up with:

```
import grass.script as grass
grass.read_command('r.category', map=base).split('\n')[:-1]

for category in categories:
         category = category.split('\t')[0]
```

Is there any other command that will do this better? Would you consider
adding one?

If all the modules are trying to do is get a list of category values, your approach seems the right one to me, but a simple list comprehension should do the trick in one line:

cats = [int(x[0]) for x in [x.split('\t') for x in g.read_command('r.category', map='RasterMap').splitlines()]]

This will work whether there are labels or not. IMHO, there is no need to use anything more sophisticated.

Especially since a

grep -R "r.category" * | grep read_command

only gives 4 hits:

imagery/i.segment.uspo/i.segment.uspo.py: numsegments = len(gscript.read_command('r.category', raster/r.geomorphon/testsuite/test_r_geom.py: category = read_command('r.category', map=self.outele) raster/r.geomorphon/testsuite/test_r_geom.py: category = read_command('r.category', map=self.outsint) raster/r.neighborhoodmatrix/r.neighborhoodmatrix.py: numneighbors = len(gscript.read_command('r.category',

The first and last only read the length (number) of categories, so this isn't an issue.

Have you met other instances ?

Moritz

_______________________________________________
grass-dev mailing list
[email protected]
https://lists.osgeo.org/mailman/listinfo/grass-dev

Reply via email to