This script is an alternative to popular package tree

Python2.7

# -*- coding: utf-8 -*-
 
import os
 
# Secuencia de escape ANSI para el color azul
BLUE = '\033[94m'
RESET = '\033[0m'
 
def list_directory(path, indent='', output_file=None):
    try:
        items = os.listdir(path)
    except OSError as e:
        print(e)
        return
 
    files = []
    directories = []
 
    # Separar archivos y directorios
    for item in items:
        full_path = os.path.join(path, item)
        if os.path.isdir(full_path):
            directories.append(item)
        else:
            files.append(item)
 
    # Mostrar directorios primero
    for directory in sorted(directories):
        line = indent + '|-- ' + BLUE + directory + RESET
        print(line)
        if output_file:
            # Guardar en el archivo sin color
            output_file.write(indent + '|-- ' + directory + '\n')
        list_directory(os.path.join(path, directory), indent + '|   ', output_file)
 
    # Mostrar archivos
    for file in sorted(files):
        line = indent + '|-- ' + file
        print(line)
        if output_file:
            output_file.write(line + '\n')
 
if __name__ == '__main__':
    path = raw_input("Ingrese el path del directorio: ")
    output_path = raw_input("Ingrese el path donde desea guardar el resultado (incluya el nombre del archivo): ")
 
    if os.path.isdir(path):
        print(path)
        with open(output_path, 'w') as f:
            f.write(path + '\n')
            list_directory(path, output_file=f)
        print("Resultado guardado en:", output_path)
    else:
        print("El path especificado no es un directorio vรกlido.")

Python3

# -*- coding: utf-8 -*-
 
import os
 
# Secuencia de escape ANSI para el color azul
BLUE = '\033[94m'
RESET = '\033[0m'
 
def list_directory(path, indent='', output_file=None):
    try:
        items = os.listdir(path)
    except OSError as e:
        print(e)
        return
 
    files = []
    directories = []
 
    # Separar archivos y directorios
    for item in items:
        full_path = os.path.join(path, item)
        if os.path.isdir(full_path):
            directories.append(item)
        else:
            files.append(item)
 
    # Mostrar directorios primero
    for directory in sorted(directories):
        line = indent + '|-- ' + BLUE + directory + RESET
        print(line)
        if output_file:
            # Guardar en el archivo sin color
            output_file.write(indent + '|-- ' + directory + '\n')
        list_directory(os.path.join(path, directory), indent + '|   ', output_file)
 
    # Mostrar archivos
    for file in sorted(files):
        line = indent + '|-- ' + file
        print(line)
        if output_file:
            output_file.write(line + '\n')
 
if __name__ == '__main__':
    path = input("Ingrese el path del directorio: ")
    output_path = input("Ingrese el path donde desea guardar el resultado (incluya el nombre del archivo): ")
 
    if os.path.isdir(path):
        print(path)
        with open(output_path, 'w') as f:
            f.write(path + '\n')
            list_directory(path, output_file=f)
        print("Resultado guardado en:", output_path)
    else:
        print("El path especificado no es un directorio vรกlido.")

Output example