Commit 159803b4 by Celine Mercier

export: now automatically sorts dictionary keys alphabetically for

tab/csv output
parent 7dcbc340
...@@ -89,7 +89,7 @@ def run(config): ...@@ -89,7 +89,7 @@ def run(config):
if pb is not None: if pb is not None:
pb(i, force=True) pb(i, force=True)
print("", file=sys.stderr) print("", file=sys.stderr)
# TODO save command in input dms? # TODO save command in input dms?
......
...@@ -5,6 +5,7 @@ from obitools3.dms.view.view cimport Line ...@@ -5,6 +5,7 @@ from obitools3.dms.view.view cimport Line
from obitools3.utils cimport bytes2str_object, str2bytes, tobytes from obitools3.utils cimport bytes2str_object, str2bytes, tobytes
from obitools3.dms.column.column cimport Column_line, Column_multi_elts from obitools3.dms.column.column cimport Column_line, Column_multi_elts
import sys
cdef class TabFormat: cdef class TabFormat:
...@@ -26,18 +27,22 @@ cdef class TabFormat: ...@@ -26,18 +27,22 @@ cdef class TabFormat:
if self.header and self.first_line: if self.header and self.first_line:
if isinstance(data.view[k], Column_multi_elts): 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)) line.append(tobytes(k)+b':'+tobytes(k2))
else: else:
line.append(tobytes(k)) line.append(tobytes(k))
else: else:
value = data[k] value = data[k]
if isinstance(data.view[k], Column_multi_elts): if isinstance(data.view[k], Column_multi_elts):
keys = data.view[k].keys()
keys.sort()
if value is None: # all keys at None 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) line.append(self.NAString)
else: 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: if value[k2] is not None:
line.append(str2bytes(str(bytes2str_object(value[k2])))) # genius programming line.append(str2bytes(str(bytes2str_object(value[k2])))) # genius programming
else: else:
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment