tree-of-life/parse-replace.py

70 lines
2.0 KiB
Python

#!/usr/bin/env python3
import csv
class Type(Enum):
Humans,
Prokaryotes,
Photosynthesizers,
Eukaryotic,
Dinosaurs,
Viruses
class GraphNode:
def __init__(self, children : list[GraphNode] = [], parent : GraphNode = None, name="", description="", typ : Type = None):
self.children = children
self.name = name
self.description = description
def add_child(self, child : GraphNode) -> None:
self.children += child
def remove_child(self, name : str) -> GraphNode or None:
for c in self.children:
if name == c.name:
self.children.remove(c)
def set_parent(self, parent : GraphNode) -> None:
self.parent = parent
def set_name(self, name:str) -> None:
self.name = name
def set_desc(self, desc:str) -> None:
self.description = desc
if __name__ == "__main__":
multi_word_names = ["old world monkeys",
"homo sapiens",
"new world monkeys",
"birds (avies)",
"water lillies",
"star anis & relatives",
"vascular plants",
"brown algae",
"excavata (protists)",
"sar protists",
"seed plants",
"red algae",
"slime molds",
"cellular slime molds",
"plasmodial slime molds",
"gram positive bacteria",
"lemures lorises and bush babies"]
filename = "in.txt"
outfile = "parsed.txt"
nodes = []
with open(filename) as f:
current_node = None
for line in f:
in_body = False
if (len(line) == 1 or line in multi_word_names) and not in_body:
node = GraphNode(name=line)
current_node = node
nodes.append(node)
else:
current_node.description = line
for node in nodes: