home *** CD-ROM | disk | FTP | other *** search
/ PC World 2001 April / PCWorld_2001-04_cd.bin / Software / TemaCD / webclean / !!!python!!! / BeOpen-Python-2.0.exe / DUTREE.PY < prev    next >
Encoding:
Python Source  |  2000-09-28  |  1.4 KB  |  60 lines

  1. #! /usr/bin/env python
  2. # Format du output in a tree shape
  3.  
  4. import os, string, sys, errno
  5.  
  6. def main():
  7.     p = os.popen('du ' + string.join(sys.argv[1:]), 'r')
  8.     total, d = None, {}
  9.     for line in p.readlines():
  10.         i = 0
  11.         while line[i] in '0123456789': i = i+1
  12.         size = eval(line[:i])
  13.         while line[i] in ' \t': i = i+1
  14.         file = line[i:-1]
  15.         comps = string.splitfields(file, '/')
  16.         if comps[0] == '': comps[0] = '/'
  17.         if comps[len(comps)-1] == '': del comps[len(comps)-1]
  18.         total, d = store(size, comps, total, d)
  19.     try:
  20.         display(total, d)
  21.     except IOError, e:
  22.         if e.errno != errno.EPIPE:
  23.             raise
  24.  
  25. def store(size, comps, total, d):
  26.     if comps == []:
  27.         return size, d
  28.     if not d.has_key(comps[0]):
  29.         d[comps[0]] = None, {}
  30.     t1, d1 = d[comps[0]]
  31.     d[comps[0]] = store(size, comps[1:], t1, d1)
  32.     return total, d
  33.  
  34. def display(total, d):
  35.     show(total, d, '')
  36.  
  37. def show(total, d, prefix):
  38.     if not d: return
  39.     list = []
  40.     sum = 0
  41.     for key in d.keys():
  42.         tsub, dsub = d[key]
  43.         list.append((tsub, key))
  44.         if tsub is not None: sum = sum + tsub
  45. ##     if sum < total:
  46. ##         list.append((total - sum, os.curdir))
  47.     list.sort()
  48.     list.reverse()
  49.     width = len(`list[0][0]`)
  50.     for tsub, key in list:
  51.         if tsub is None:
  52.             psub = prefix
  53.         else:
  54.             print prefix + string.rjust(`tsub`, width) + ' ' + key
  55.             psub = prefix + ' '*(width-1) + '|' + ' '*(len(key)+1)
  56.         if d.has_key(key):
  57.             show(tsub, d[key][1], psub)
  58.  
  59. main()
  60.