comparison python/tree.py @ 374:6e0853b16457

initial tree prog
author Jeff Hammel <jhammel@mozilla.com>
date Wed, 24 Jul 2013 02:38:27 -0700
parents
children 9314c1008189
comparison
equal deleted inserted replaced
373:8d4a0a2a5038 374:6e0853b16457
1 #!/usr/bin/env python
2 # -*- coding: utf-8 -*-
3
4 """
5 tree in python
6 """
7
8 import optparse
9 import os
10 import sys
11
12 here = os.path.dirname(os.path.realpath(__file__))
13
14 def depth(directory):
15 directory = os.path.abspath(directory)
16 level = 0
17 while True:
18 directory, remainder = os.path.split(directory)
19 level += 1
20 if not remainder:
21 break
22 return level
23
24 def tree(directory):
25 retval = []
26 level = depth(directory)
27 directories = {}
28 for dirpath, dirnames, filenames in os.walk(directory, topdown=True):
29 indent = depth(dirpath) - level
30 dirnames[:] = sorted(dirnames, key=lambda x: x.lower())
31 directories[dirpath] = dirnames
32 retval.append('%s%s%s' % ('│' * (indent-1),
33 '├' if indent else '',
34 os.path.basename(dirpath)))
35 retval.extend(['%s%s%s' % ('│' * (indent),
36 '├' if index < len(filenames) -1 else '└',
37 name)
38 for index, name in
39 enumerate(sorted(filenames, key=lambda x: x.lower()))
40 ])
41 return '\n'.join(retval)
42
43 def main(args=sys.argv[1:]):
44
45 usage = '%prog [options]'
46 parser = optparse.OptionParser(usage=usage, description=__doc__)
47 options, args = parser.parse_args(args)
48 if not args:
49 args = ['.']
50
51 not_directory = [arg for arg in args
52 if not os.path.isdir(arg)]
53 if not_directory:
54 parser.error("Not a directory: %s" % (', '.join(not_directory)))
55
56 for arg in args:
57 print (tree(arg))
58
59 if __name__ == '__main__':
60 main()