This commit is contained in:
Kyle Lahnakoski 2020-04-13 13:44:03 -04:00
Родитель 8dd538d3df
Коммит 5a580e176e
1 изменённых файлов: 78 добавлений и 0 удалений

78
vendor/jx_python/convert.py поставляемый Normal file
Просмотреть файл

@ -0,0 +1,78 @@
# encoding: utf-8
#
#
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this file,
# You can obtain one at http://mozilla.org/MPL/2.0/.
#
# Contact: Kyle Lahnakoski (kyle@lahnakoski.com)
#
from __future__ import absolute_import, division, unicode_literals
from mo_dots import wrap, unwraplist
from mo_future import text
from mo_json import value2json
from mo_logs.strings import expand_template
def list2cube(rows, column_names=None):
if column_names:
keys = column_names
else:
columns = set()
for r in rows:
columns |= set(r.keys())
keys = list(columns)
data = {k: [] for k in keys}
output = wrap({
"meta": {"format": "cube"},
"edges": [
{
"name": "rownum",
"domain": {"type": "rownum", "min": 0, "max": len(rows), "interval": 1}
}
],
"data": data
})
for r in rows:
for k in keys:
data[k].append(unwraplist(r[k]))
return output
def list2table(rows, column_names=None):
if column_names:
keys = list(set(column_names))
else:
columns = set()
for r in rows:
columns |= set(r.keys())
keys = list(columns)
output = [[unwraplist(r.get(k)) for k in keys] for r in rows]
return wrap({
"meta": {"format": "table"},
"header": keys,
"data": output
})
def table2csv(table_data):
"""
:param table_data: expecting a list of tuples
:return: text in nice formatted csv
"""
text_data = [tuple(value2json(vals, pretty=True) for vals in rows) for rows in table_data]
col_widths = [max(len(t) for t in cols) for cols in zip(*text_data)]
template = ", ".join(
"{{" + text(i) + "|left_align(" + text(w) + ")}}"
for i, w in enumerate(col_widths)
)
output = "\n".join(expand_template(template, d) for d in text_data)
return output