Case Study: tree.pyΒΆ
The following program implements a subset of the behavior of the Unix tree program.
#!/usr/bin/env python3
import os
import sys
def getroot():
if len(sys.argv) == 1:
path = ''
else:
path = sys.argv[1]
if os.path.isabs(path):
tree_root = path
else:
tree_root = os.path.join(os.getcwd(), path)
return tree_root
def getdirlist(path):
dirlist = os.listdir(path)
dirlist = [name for name in dirlist if name[0] != '.']
dirlist.sort()
return dirlist
def traverse(path, prefix='|--', s='.\n', f=0, d=0):
dirlist = getdirlist(path)
for num, file in enumerate(dirlist):
lastprefix = prefix[:-3] + '`--'
dirsize = len(dirlist)
if num < dirsize - 1:
s += '{0} {1}\n'.format(prefix, file)
else:
s += '{0} {1}\n'.format(lastprefix, file)
path2file = os.path.join(path, file)
if os.path.isdir(path2file):
d += 1
if getdirlist(path2file):
s, f, d = traverse(path2file, '| ' + prefix, s, f, d)
else:
f += 1
return s, f, d
if __name__ == '__main__':
root = getroot()
tree_str, files, dirs = traverse(root)
if dirs == 1:
dirstring = 'directory'
else:
dirstring = 'directories'
if files == 1:
filestring = 'file'
else:
filestring = 'files'
print(tree_str)
print('{0} {1}, {2} {3}'.format(dirs, dirstring, files, filestring))
Using the tree.py
program above as a model, write a program named
litter.py
that creates an empty file named trash.txt
in each
subdirectory of a directory tree given the root of the tree as an argument (or
the current directory as a default). Now write a program named cleanup.py
that removes all these files.