Added a module that generates file tree views.
This commit is contained in:
parent
eaa9b87990
commit
c620c1b19b
1 changed files with 70 additions and 0 deletions
70
wobbl_tools/text/tree_view.py
Normal file
70
wobbl_tools/text/tree_view.py
Normal file
|
@ -0,0 +1,70 @@
|
||||||
|
#!/usr/bin/python3
|
||||||
|
import os
|
||||||
|
from wobbl_tools.text.format import format_string
|
||||||
|
|
||||||
|
|
||||||
|
def tree_view(
|
||||||
|
path: str | os.PathLike,
|
||||||
|
exclude_paths: list[str | os.PathLike] = [],
|
||||||
|
exclude_names: list[str | os.PathLike] = [],
|
||||||
|
auto_exclude: bool = True
|
||||||
|
):
|
||||||
|
"""
|
||||||
|
Returns a tree view of the given path.
|
||||||
|
|
||||||
|
:param path: The path of the directory.
|
||||||
|
:param exclude_paths: A list of paths to exclude from the tree view.
|
||||||
|
:param exclude_names: A list of file names to exclude from the tree view.
|
||||||
|
:param auto_exclude: If True, every file whose name starts with a dot will be ignored.
|
||||||
|
:return: A string representing the tree view of the given path.
|
||||||
|
"""
|
||||||
|
|
||||||
|
tree = ""
|
||||||
|
|
||||||
|
if not path[-1] == "/":
|
||||||
|
path += "/"
|
||||||
|
|
||||||
|
root_folder_name = path.split("/")[-2]
|
||||||
|
|
||||||
|
for subdir, dirs, files in os.walk(path):
|
||||||
|
relative_path = subdir.replace(path, "")
|
||||||
|
folder_name = subdir.split("/")[-1]
|
||||||
|
|
||||||
|
files.sort()
|
||||||
|
|
||||||
|
if (
|
||||||
|
subdir in exclude_paths or
|
||||||
|
folder_name in exclude_names or
|
||||||
|
(auto_exclude and folder_name.startswith("."))
|
||||||
|
):
|
||||||
|
continue
|
||||||
|
|
||||||
|
indentation_level = relative_path.count("/")
|
||||||
|
folder_indentation = "│ " * indentation_level
|
||||||
|
file_indentation = "│ " * (indentation_level + 1)
|
||||||
|
|
||||||
|
if relative_path == "":
|
||||||
|
tree += format_string(f"§bold§dark_blue{root_folder_name}§rs/\n")
|
||||||
|
file_indentation = ""
|
||||||
|
|
||||||
|
else:
|
||||||
|
tree += format_string(f"{folder_indentation}├─ §bold§blue{folder_name}§rs/\n")
|
||||||
|
|
||||||
|
for file in files:
|
||||||
|
if (
|
||||||
|
f"{subdir}/{file}" in exclude_paths or
|
||||||
|
file in exclude_names or
|
||||||
|
(auto_exclude and folder_name.startswith("."))
|
||||||
|
):
|
||||||
|
continue
|
||||||
|
|
||||||
|
tree += f"{file_indentation}├─ {file}\n"
|
||||||
|
|
||||||
|
|
||||||
|
#print(folder_name + relative_path, dirs, files)
|
||||||
|
|
||||||
|
return tree
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
print(tree_view("/home/emil/Dokumente/python/wobbl_tools/wobbl_tools/", exclude_names=["__pycache__"]))
|
Loading…
Reference in a new issue