# Directory Tree Visualizer

This utility visualizes the file structure of a directory in a tree-like format directly in the terminal. It demonstrates recursion and file system traversal using the modern `pathlib` module.

**Modules Used:**
*   [[programming/python/modules/pathlib-module|pathlib]]: To traverse directories and handle paths object-orientedly.
*   [[programming/python/modules/argparse-module|argparse]]: To handle the input directory argument.

## The Code

Save this as `tree.py`.

```python
import argparse
from pathlib import Path

def print_tree(directory, prefix=""):
    path = Path(directory)
    
    # Get all items in directory
    try:
        # Sort items: directories first, then files, both alphabetically
        items = sorted(list(path.iterdir()), key=lambda x: (not x.is_dir(), x.name.lower()))
    except PermissionError:
        print(f"{prefix}[Access Denied]")
        return

    # Tree connectors
    space =  "    "
    branch = "│   "
    tee =    "├── "
    last =   "└── "

    count = len(items)
    
    for i, item in enumerate(items):
        is_last = (i == count - 1)
        
        connector = last if is_last else tee
        
        print(f"{prefix}{connector}{item.name}")
        
        if item.is_dir():
            extension = space if is_last else branch
            print_tree(item, prefix + extension)

if __name__ == "__main__":
    parser = argparse.ArgumentParser(description="Directory Tree Visualizer")
    parser.add_argument("directory", nargs="?", default=".", help="Directory to visualize (default: current)")
    
    args = parser.parse_args()
    
    root = Path(args.directory)
    if not root.exists():
        print(f"Error: {root} does not exist.")
    else:
        print(root.resolve().name or str(root.resolve()))
        print_tree(root)
```

## Usage

```bash
python tree.py ./my_project
```

[[programming/python/python]]