From 159803b40aed3bb2f23e0e844bb2d3996d3ba093 Mon Sep 17 00:00:00 2001 From: Celine Mercier Date: Fri, 31 Jul 2020 16:43:35 +0200 Subject: [PATCH] export: now automatically sorts dictionary keys alphabetically for tab/csv output --- python/obitools3/commands/export.pyx | 2 +- python/obitools3/format/tab.pyx | 11 ++++++++--- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/python/obitools3/commands/export.pyx b/python/obitools3/commands/export.pyx index 1ff6159..aacf425 100755 --- a/python/obitools3/commands/export.pyx +++ b/python/obitools3/commands/export.pyx @@ -89,7 +89,7 @@ def run(config): if pb is not None: pb(i, force=True) - print("", file=sys.stderr) + print("", file=sys.stderr) # TODO save command in input dms? diff --git a/python/obitools3/format/tab.pyx b/python/obitools3/format/tab.pyx index 5f4f728..61153b9 100755 --- a/python/obitools3/format/tab.pyx +++ b/python/obitools3/format/tab.pyx @@ -5,6 +5,7 @@ from obitools3.dms.view.view cimport Line from obitools3.utils cimport bytes2str_object, str2bytes, tobytes from obitools3.dms.column.column cimport Column_line, Column_multi_elts +import sys cdef class TabFormat: @@ -26,18 +27,22 @@ cdef class TabFormat: if self.header and self.first_line: if isinstance(data.view[k], Column_multi_elts): - for k2 in data.view[k].keys(): + keys = data.view[k].keys() + keys.sort() + for k2 in keys: line.append(tobytes(k)+b':'+tobytes(k2)) else: line.append(tobytes(k)) else: value = data[k] if isinstance(data.view[k], Column_multi_elts): + keys = data.view[k].keys() + keys.sort() if value is None: # all keys at None - for k2 in data.view[k].keys(): # TODO could be much more efficient + for k2 in keys: # TODO could be much more efficient line.append(self.NAString) else: - for k2 in data.view[k].keys(): # TODO could be much more efficient + for k2 in keys: # TODO could be much more efficient if value[k2] is not None: line.append(str2bytes(str(bytes2str_object(value[k2])))) # genius programming else: