У меня есть работающий скрипт на python, который берет данные из моих столбцов csv и преобразует их в файл json, который будет прочитан моей визуализацией d3 sunburst.Проблема в том, что в последнем дочернем элементе нет элемента «size», который необходим для правильного заполнения диаграммы солнечных лучей.
Ниже приведен скрипт, который читает csv в json так, как мне нужно.Я попытался изменить скрипт с помощью цикла if else, чтобы найти, где нет дочернего элемента (последний элемент), а затем добавить к этому элементу «size: 1», но ничего не происходит.
Это примерданные в формате csv.Код должен работать для чего угодно.
Энергия, Стрижка, Потеря, Обучаемость, Группа, Порода
Регулярные упражнения, 2-3 раза в неделю Чистка, Сезонная, Легкая тренировка, Игрушечная группа,Affenpinscher
import csv
from collections import defaultdict
def ctree():
return defaultdict(ctree)
def build_leaf(name, leaf):
res = {"name": name}
# add children node if the leaf actually has any children
if len(leaf.keys()) > 0:
res["children"] = [build_leaf(k, v) for k, v in leaf.items()]
return res
def main():
tree = ctree()
# NOTE: you need to have test.csv file as neighbor to this file
with open('test.csv') as csvfile:
reader = csv.reader(csvfile)
for rid, row in enumerate(reader):
if rid == 0:
continue
# usage of python magic to construct dynamic tree structure and
# basically grouping csv values under their parents
leaf = tree[row[0]]
for cid in range(1, len(row)):
leaf = leaf[row[cid]]
# building a custom tree structure
res = []
for name, leaf in tree.items():
res.append(build_leaf(name, leaf))
# this is what I tried to append the size element
def parseTree(leaf):
if len(leaf["children"]) == 0:
return obj["size"] == 1
else:
for child in leaf["children"]:
leaf['children'].append(parseTree(child))
# printing results into the terminal
import json
import uuid
from IPython.display import display_javascript, display_html, display
print(json.dumps(res, indent=2))
main()
Последний дочерний элемент должен читать примерно так:
[
{
"name": "Regular Exercise",
"children": [
{
"name": "2-3 Times a Week Brushing",
"children": [
{
"name": "Seasonal",
"children": [
{
"name": "Easy Training",
"children": [
{
"name": "Toy Group",
"children": [
{
"name": "Affenpinscher",
"size": 1
}
]
}]}]}]}]}]}