Hi Nikos,

You could use numpy and genfromtxt() to parse the output string...
genfromtxt() requires an StringIO object (or file) and StringIO (from io) 
requires unicode()...

So you could do:

from io import StringIO
import numpy as np
output = np.genfromtxt(StringIO(unicode(grass.read_command('r.category', 
map=base))) , delimiter='\t', dtype=None, names=['cat', 'label'])

That causes however some overhead [1]. So if it makes sense depends on what you 
want to do with the data in the further processing chain...

Cheers
Stefan

1: https://docs.scipy.org/doc/numpy/user/basics.io.genfromtxt.html



-----Original Message-----
From: grass-dev <[email protected]> On Behalf Of Nikos 
Alexandris
Sent: søndag 19. august 2018 22:19
To: GRASS-GIS development mailing list <[email protected]>
Subject: [GRASS-dev] Parsing output of r.category which includes labels

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?

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

Reply via email to