In [8]:
import os
from os import listdir, sep
from os.path import abspath, basename, isdir

def tree(dir, padding, print_files=False, isLast=False, isFirst=False):
    
    if os.path.isfile('tree.txt'):
        Logfile = open('tree.txt', 'a')
    else:
        Logfile = open('tree.txt', 'w')
        
    if basename(dir) in ['.git', 'Julianne', '.ipynb_checkpoints']:
        return
    
    if isFirst:
        line = padding.decode('utf8')[:-1].encode('utf8') + basename(dir)
        #print padding.decode('utf8')[:-1].encode('utf8') + basename(dir)
        Logfile.write(line + '\n')
        Logfile.flush()
    else:
        if isLast:
            line = padding.decode('utf8')[:-1].encode('utf8') + '└── ' + basename(abspath(dir))
            #print line
            Logfile.write(line + '\n')
            Logfile.flush()
        else:
            line = padding.decode('utf8')[:-1].encode('utf8') + '├── ' + basename(abspath(dir))
            #print line
            Logfile.write(line + '\n')
            Logfile.flush()
    Logfile.flush()
    files = []
    if print_files:
        files = listdir(dir)
    else:
        files = [x for x in listdir(dir) if isdir(dir + sep + x)]
    Logfile.flush()
    if not isFirst:
        padding = padding + '   '
    Logfile.flush()
    files = sorted(files, key=lambda s: s.lower())
    count = 0
    last = len(files) - 1
    for i, file in enumerate(files):
        count += 1
        path = dir + sep + file
        isLast = i == last
        Logfile.flush()
        if isdir(path):
            Logfile.flush()
            if count == len(files):
                if isFirst:
                    tree(path, padding, print_files, isLast, False)
                else:
                    tree(path, padding + ' ', print_files, isLast, False)
            else:
                tree(path, padding + '│', print_files, isLast, False)
        else:
            Logfile.flush()
            if isLast:
                line = padding + '└── ' + file
                #print line
                Logfile.write(line + '\n')
                Logfile.flush()
                
            else:
                line = padding + '├── ' + file
                #print line
                Logfile.write(line + '\n')
                Logfile.flush()
    
    Logfile.flush()
    Logfile.flush()

In [9]:
topdir = os.path.sep.join(os.path.abspath(os.path.curdir).split(os.path.sep)[:-1])
target_dir = os.path.join(topdir, 'data', 'catalogs')

In [10]:
Log = open('tree.txt', 'wb')
tree(target_dir, '', True, False, True)