Directiry tree generator using python
by specter - Saturday June 24, 2023 at 10:33 AM
#1
import argparse
import os
from walkdir import filtered_walk


parser = argparse.ArgumentParser(
    description='Print the directory-tree code for the LaTeX dirtree package.')
parser.add_argument(dest='path', type=str, help="Root directory of the tree")
parser.add_argument('-d', '--maxDepth', dest='maxDepth',
                    type=int, help="Max depth for tree expansion")
parser.add_argument('-H', '--includeHidden', dest='includeHidden',
                    action='store_true', help='Include hidden files')
parser.add_argument('-S', '--includeSystem', dest='includeSystem',
                    action='store_true', help='Include system files')
system_file_names = [".DS_Store"]


def delete_trailing_slash(path_name):
    """ Delete trailing slash which might otherwise lead to errors """
    while path_name.endswith('/'):
        path_name = path_name[:-1]
    return path_name


def get_relative_depth(dir_path, level_offset):
    """ Count how many levels deep is the directory with respect to dirRoot """
    return dir_path.count(os.path.sep) - level_offset


def escape_illegal(name):
    """ Escape illegal symbols for LaTeX """
    illegal_char_array = ['\\', '&', '%', '$', '#', '_', '{', '}', '~', '^']
    for char in illegal_char_array:
        name = name.replace(char, "\\" + char)
    return name


rootDir = delete_trailing_slash(parser.parse_args().path)
includeHidden = parser.parse_args().includeHidden
includeSystem = parser.parse_args().includeSystem
maxDepth = parser.parse_args().maxDepth

# Check if the directory exists
if os.path.isdir(rootDir) and os.path.exists(rootDir):
    INDENT_CHAR = " "
    # Depth of the root (i.e. number of "/")
    levelOffset = rootDir.count(os.path.sep) - 1
    # Create filter
    excluded_filter = []
    if not includeHidden:
        excluded_filter.append(".*")
    if not includeSystem:
        excluded_filter += system_file_names
    for dirName, subdirList, fileList in sorted(filtered_walk(
        rootDir, depth=maxDepth, excluded_dirs=excluded_filter,
            excluded_files=excluded_filter)):
        level = get_relative_depth(dirName, levelOffset)
        baseName = os.path.basename(dirName)
        if level == 1:  # for the first level only print the whole path
            print(INDENT_CHAR + str(level) + " - " + escape_illegal(dirName))
        else:
            print((INDENT_CHAR * level + str(level) +
                  " - " + escape_illegal((os.path.basename(dirName)))))
        level += 1
        for fileName in sorted(fileList):
            print(INDENT_CHAR * level + str(level) + " - "
                  + escape_illegal(fileName))
else:
    print("Error: root directory not found")
Reply
#2
wao wao wao its mind blowing
Reply


Possibly Related Threads…
Thread Author Replies Views Last Post
  Useful links for developers Manfruity 36 2,367 Apr 24, 2026, 06:54 PM
Last Post: Weirdtatsum30777
  ⭐ Sektor7 - All courses (6 in total) ⭐ red_dot 599 38,581 Apr 23, 2026, 09:51 PM
Last Post: cwel321
  Discord Token Grabber | Private Stealer | Leaked For Free Piplup 351 57,830 Apr 21, 2026, 11:51 PM
Last Post: OldeChicago93
  WEBSITES FOR FREE INSTAGRAM FOLLOWERS ⭐ UHQ Moneygain 101 10,433 Feb 10, 2026, 03:02 PM
Last Post: onionX232
  How to buy crypto without KYC Manfruity 40 2,174 Feb 09, 2026, 10:55 PM
Last Post: Stevemox2

Forum Jump:


 Users browsing this forum: 1 Guest(s)