# TD3
import os
#########
### ex. 1
for root, dir, files in os.walk('.'):
    for file in files:
        print root+os.sep+file
##########
#### ex. 2
f=d=0
for root, dir, files in os.walk('.'):
    f+=len(files); d+=len(dir)
print "%d files, %d directories" % (f,d)

# ne compte pas "."

#########
### ex. 3
# utiliser os.path.islink(path)

f=s=d=0
for root, dirs, files in os.walk('.'):
    for dir in dirs:
        if os.path.islink(root+os.sep+dir): s+=1
        else: d+=1
    for file in files:
        if os.path.islink(root+os.sep+file): s+=1
        else: f+=1

print "%d directories, %d files, %d symlinks" % (d,f,s)



#########
### ex. 4

# Un lien vers un fichier non existant peut generer une erreur
# On gere avec try/except

fpriv=fpub=spriv=spub=dpriv=dpub=0
for root, dirs, files in os.walk(os.environ['HOME']):
    for dir in dirs:
        try:
            s = oct(os.stat(root+os.sep+dir).st_mode)[-2:]
            pub = int(s,8)
            if os.path.islink(root+os.sep+dir):
                if pub: spub+=1
                else: spriv+=1
            else:
                if pub: dpub+=1
                else: dpriv+=1
        except Exception, e :
            print roor+os.sep+dir+' --> broken link!'
            print e
    for file_ in files:
        try:
            s = oct(os.stat(root+os.sep+file_).st_mode)[-2:]
            pub = int(s,8)
            if os.path.islink(root+os.sep+file_):
                if pub: spub+=1
                else: spriv+=1
            else:
                if pub: fpub+=1
                else: fpriv+=1
        except Exception, e:
            print root+os.sep+file_ + ' --> broken link'
            print e
print
print "Statistics of %s:" % (os.environ['HOME'])
print
print "Public directories: %d" % (dpub,)
print "Private directories: %d" % (dpriv,)
print "Public files: %d" % (fpub,)
print "Private files: %d" % (fpriv,)
print "Public symlinks: %d" % (spub,)
print "Private symlinks: %d" % (spriv,)