Skip to content

Instantly share code, notes, and snippets.

@jvrplmlmn
Last active February 24, 2020 12:45
Show Gist options
  • Save jvrplmlmn/5755890 to your computer and use it in GitHub Desktop.
Save jvrplmlmn/5755890 to your computer and use it in GitHub Desktop.
Python implementation of tree command
# -*- coding: utf-8 -*-
from os import walk, sep
from os.path import basename, isdir
from sys import argv
def tree(startpath, print_files=False):
for root, subdirs, files in walk(startpath):
level = root.replace(startpath, '').count(sep)
indent = ' |' * (level-1) + ' +- '
print "%s%s/" % (indent, basename(root))
#print "{}{}/".format(indent, os.path.basename(root))
subindent = ' |' * (level) + ' +- '
if print_files:
for f in files:
print "%s%s" % (subindent, f)
#print "{}{}/".format(subindent, f)
def usage():
return '''Usage: %s [-h] [-f] [PATH]
Print tree structure.
Options:
-h, --help Print help info
-f Print files as well as directories
PATH Path to process''' % basename(argv[0])
def main():
path = '.'
# Check for help
if ('-h' or '--help') in argv:
print usage()
# tree
elif len(argv) == 1:
tree(path)
# tree -f
elif len(argv) == 2 and argv[1] == '-f':
tree(path, True)
# tree dir
elif len(argv) == 2:
path = argv[1]
if isdir(path):
tree(path)
else:
print 'ERROR: \'' + path + '\' is not a directory'
# tree -f dir
elif len(argv) == 3 and argv[1] == '-f':
path = argv[2]
if isdir(path):
tree(path, True)
else:
print 'ERROR: \'' + path + '\' is not a directory'
else:
print 'ERROR: Wrong parameters'
print usage()
if __name__ == '__main__':
main()
@jvrplmlmn
Copy link
Author

I don't know why this got posted as an anonymous user, wtf?

https://gist.github.com/anonymous/5755882

@axellbrendow
Copy link

axellbrendow commented Aug 4, 2019

You are doing some unnecessary operations, it is better to put the subindent variable inside the if block:

		#print "{}{}/".format(indent, os.path.basename(root))
		if print_files:
			subindent = '  |' * (level) + '  +- '

@smarie
Copy link

smarie commented Feb 24, 2020

For what's worth, here is an implementation leveraging treelib. Of course less efficient, but can be interesting. https://gist.github.com/smarie/3536eab83994b993324b85046bb237b4

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment