* Moritz Lennert <[email protected]> [2018-08-20 13:40:36 +0200]:
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()]]
Great. I love comprehensions (and generators). It's one of my favourite Python exercises.
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 ?
No. Yet, my Skepsis now is the following: The argument you present, if I understand it right, is "no need to bother", since there aren't but a few potential use cases. What about better integration and more joyful scripting? `r.category` handles both values and labels. And there is currently no `grass.script` helper function that considers both labels out of the box. For example, a parser helper that will return a dictionary. Is this "too much" here? Thanks Moritz, Nikos
signature.asc
Description: PGP signature
_______________________________________________ grass-dev mailing list [email protected] https://lists.osgeo.org/mailman/listinfo/grass-dev
