export: now automatically sorts dictionary keys alphabetically for
tab/csv output
This commit is contained in:
@ -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:
|
|||||||
|
|
||||||
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:
|
||||||
|
Reference in New Issue
Block a user