Source code for minerva.utils.string_ops
[docs]
def tree_like_formating(d: dict, initial_indent: str = "") -> str:
"""Format a dictionary into a tree-like structure.
Parameters
----------
d : dict
The dictionary to format.
initial_indent : str, optional
The initial indentation for the first level of the tree structure
(default is no indentation), by default "". This is useful for
controlling the starting point of the tree structure. For example,
if you want to start the tree structure with a specific indentation
level, you can pass a string of spaces or other characters to this
parameter. This allows for more flexibility in formatting the tree
structure according to your preferences.
Returns
-------
str
The formatted tree-like structure as a string.
"""
lines = []
def recursive_tree_structure(d, indent):
keys = list(d.keys())
for i, key in enumerate(keys):
value = d[key]
is_last_child = i == len(keys) - 1
branch = "└── " if is_last_child else "├── "
child_indent = " " if is_last_child else "│ "
if isinstance(value, dict):
lines.append(f"{indent}{branch}{key}")
recursive_tree_structure(value, indent + child_indent)
else:
lines.append(f"{indent}{branch}{key}: {value}")
recursive_tree_structure(d, initial_indent)
return "\n".join(lines)
[docs]
def indent_text(text: str, spaces: int = 4, char: str = " ") -> str:
"""Add indentation to each line of a given text.
Parameters
----------
text : str
The text to be indented.
spaces : int, optional
The number of spaces to indent each line, by default 4
char : str, optional
The character to use for indentation, by default " "
Returns
-------
str
The indented text.
"""
indent = char * spaces
return "\n".join(
f"{indent}{line}" if line.strip() else line for line in text.splitlines()
)