{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"pygments_lexer":"ipython3","nbconvert_exporter":"python","version":"3.6.4","file_extension":".py","codemirror_mode":{"name":"ipython","version":3},"name":"python","mimetype":"text/x-python"}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"import os\nfrom itertools import islice\n\ndef get_directory_tree(start_path, max_depth=None, include_files=True, sort_by=None, reverse=False, max_items=None):\n    if sort_by is not None:\n        sort_key_map = {\n            'name': lambda x: x.name,\n            'size': lambda x: x.stat().st_size,\n            'date': lambda x: x.stat().st_mtime,\n            'type': lambda x: x.is_file()\n        }\n        sort_key = sort_key_map.get(sort_by)\n\n    def get_items(path):\n        with os.scandir(path) as it:\n            if include_files:\n                items = (entry for entry in it)\n            else:\n                items = (entry for entry in it if entry.is_dir())\n            if sort_by is not None:\n                items = sorted(items, key=sort_key, reverse=reverse)\n            return items\n\n    def print_tree(path, level=0):\n        if max_depth is not None and level > max_depth:\n            return\n        indent = ' ' * 4 * level\n        yield f'{indent}{os.path.basename(path)}'\n        if os.path.isdir(path):\n            items = get_items(path)\n            if max_items is not None:\n                items = islice(items, max_items)\n            for item in items:\n                yield from print_tree(item.path, level + 1)\n\n    return print_tree(start_path)\n\ntree_generator = get_directory_tree(\n    start_path='/kaggle/input',\n    max_depth=4,\n    include_files=True,\n    sort_by='type',\n    reverse=False,\n    max_items=4\n)\nfor line in tree_generator:\n    print(line)","metadata":{"execution":{"iopub.status.busy":"2023-07-17T21:48:46.773549Z","iopub.execute_input":"2023-07-17T21:48:46.773936Z","iopub.status.idle":"2023-07-17T21:49:04.998456Z","shell.execute_reply.started":"2023-07-17T21:48:46.773905Z","shell.execute_reply":"2023-07-17T21:49:04.997824Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## 🌳 Display a Directory Tree with Customizable Options 🌳\n### Usage:\n#### 1. View a different directory: change`start_path`.\n```python\ntree_generator = get_directory_tree(\n    start_path='/path/to/your/directory',\n    max_depth=4,\n    include_files=True,\n    sort_by='type',\n    reverse=False,\n    max_items=4\n)\nfor line in tree_generator:\n    print(line)\n```\n\n#### 2. **generate a deeper or shallower directory tree:** change `max_depth`.\n```python\ntree_generator = get_directory_tree(\n    start_path='/kaggle/input',\n    max_depth=2,  # Only generate 2 levels\n    include_files=True,\n    sort_by='type',\n    reverse=False,\n    max_items=4\n)\nfor line in tree_generator:\n    print(line)\n```\n\n#### 3. **Exclude files**: change`include_files`.\n```python\ntree_generator = get_directory_tree(\n    start_path='/kaggle/input',\n    max_depth=4,\n    include_files=False,  # Only include folders\n    sort_by='type',\n    reverse=False,\n    max_items=4\n)\nfor line in tree_generator:\n    print(line)\n```\n\n#### 4. ***Sort**: change the `sort_by` and `reverse`.\n```python\ntree_generator = get_directory_tree(\n    start_path='/kaggle/input',\n    max_depth=4,\n    include_files=True,\n    sort_by='size',  # Sort items by size\n    reverse=True,  # Sort in descending order\n    max_items=4\n)\nfor line in tree_generator:\n    print(line)\n```\n\n#### 5. **More or fewer items** at each level: change`max_items`.\n```python\ntree_generator = get_directory_tree(\n    start_path='/kaggle/input',\n    max_depth=4,\n    include_files=True,\n    sort_by='type',\n    reverse=False,\n    max_items=10  # Display up to 10 items at each level\n)\nfor line in tree_generator:\n    print(line)\n```\n\n---\n#### 6. **Add utility script**, `utils/directory_tree_generator`. In a notebook:\n```python\nfrom utils_directory_tree_generator import get_directory_tree\n\ntree_generator = get_directory_tree(\n    start_path=base_directory,  # Updated this line\n    max_depth=5,\n    include_files=True,\n    sort_by='type',\n    reverse=False,\n    max_items=5\n)\nfor line in tree_generator:\n    print(line)\n```","metadata":{}},{"cell_type":"markdown","source":"<div style=\"background-color: #f2f2f2; padding: 53px; border-radius: 5px;\">\n  <h3>If you found this notebook helpful...</h3>\n  <p>\nPlease consider supporting my work by giving it a star. Your support helps me continue to maintain and develop high-quality code and pursue my career as a data analyst/engineer. Feedback is always welcome and appreciated. Thank you for your time.\n  </p> \n  <h4>\n  <p style=\"text-align: right;\">\n  <a href=\"https://github.com/patmejia\"> - pat [¬º-°]¬ </a>\n  </h4>\n  </p>\n</div>","metadata":{}},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]}]}