Formation I.S.N.

Arbres et système de fichiers

Exercice : le poids d'un fichier

On utilise ici le module os.

os.path.getsize(nom d'un fichier) : retourne la taille en octets du fichier associé, ce fichier pouvant être un répertoire (taille limitée au fichier répertoire, sans la taille des fichiers "contenus" dans le répertoire). Le nom du fichier ciblé est donné avec son chemin complet (entre guillemets : l'entrée est de type str).

os.path.isdir(nom d'un fichier) : retourne True si le fichier est un répertoire, False sinon.

os.listdir(nom fichier) : liste des fichiers "contenus" dans le répertoire donné en argument.

os.path.join(chemin d'un répertoire, nom d'un fichier de répertoire) : retourne le chemin complet sur le fichier par 'adjonction' du chemin répertoire et du nom de fichier (en utilisant notamment \ ou / suivant qu'il s'agit de windows ou d'un unix)

A l'aide de ces méthodes du module os, écrire une fonction récursive retournant la taille "cumulée" d'un répertoire (c'est à dire poids du fichier du répertoire cumulée avec les poids des fichiers du répertoire).

  • doc python
  • un code
  • afficher les noms

Vous trouverez la documentation python sur le module os à cette adresse : https://docs.python.org/3.6/library/os.html.


import os

def taille(chemin) :
    """ retourne la taille 'cumulée' en octets."""
    
    nbOctets = os.path.getsize(chemin)   #  taille du fichier
    
    
    # si le fichier est un répertoire
    if os.path.isdir(chemin) :   
        # ajout des tailles des fichiers  'contenus' dans le répertoire 
        for fichier in os.listdir(chemin) :
            fichier_fils = os.path.join(chemin,fichier)
            nbOctets += taille(fichier_fils)
            
    return nbOctets
    
print(taille("../arborescence"))
print(taille("../arborescence") - os.path.getsize("../arborescence") )

Dans la version qui suit, on affiche également les noms des fichiers (et répertoires).

Ce script python est placé dans le dossier du fichier que vous êtes en train de lire lors de l'appel. Vous l'y trouverez sous le nom arbo.py.


import os

def taille(chemin, p=0) :
	""" retourne la taille 'cumulée' en octets."""

	nbOctets = os.path.getsize(chemin)   #  taille du fichier


	# si le fichier est un répertoire
	if os.path.isdir(chemin) :
		 
		# ajout des tailles des fichiers  'contenus' dans le répertoire
		for fichier in os.listdir(chemin) :
			fichier_fils = os.path.join(chemin,fichier)
			taillef = os.path.getsize(fichier_fils)
			print("   "*p, taillef, fichier_fils)
			nbOctets += taille(fichier_fils, p+1)

	return nbOctets


chemin = "../../formation_recursivite"

print("\nPoids cumulé du fichier ", chemin, taille(chemin))