Partage
  • Partager sur Facebook
  • Partager sur Twitter

Infos répertoire

    13 novembre 2014 à 16:23:21

    Bonjour à tous, 

    Je voudrai coder un programme qui prend le chemin absolu d'un répertoire et affiche des infos sur la tailles des fichiers contenus dans ce répertoire de la manière suivante :

    13 documents use 6Mo (10% of total size)

    12 pictures use 60Mo (90% of total size)

    0 others use 0Mo (0% of total size)

    J'ai écrit un code que je mets à la fin du message. 

    Il marche très bien pour les répertoires ne contenant pas de sous-répertoires. Mais dès qu'il y en a, je constate que les fichiers dans ces sous-repertoires ne sont pas comptabilisés. Pourtant, ma fonction s'appelle elle même quand elle rencontre des sous-répertoires. 

     Les valeurs que me renvoient les sommes à la fin du code ne sont pas cohérentes non plus. 

    Bien à vous.

    import os
    import os.path
    
    e_documents=[".pdf",".html",".rtf",".txt"]
    e_images=[".png",".jpg",".jpeg"]
    e_videos=[".mpg",".avi",".mp4",".mov"]
    
    def taille(chemin_absolu): #donne la taille totale du répertoire dont le chemin absolu est donné en parametre
        t=0
        for chemin, noms_sous_repertoires, noms_fichiers in os.walk(chemin_absolu):
         for f in noms_fichiers:
             f_chemin=os.path.join(chemin,f)
             t+=os.path.getsize(f_chemin)
        return t 
    
    def documents(racine):
        fichiers=os.listdir(racine)
        fichiers=[os.path.join(racine,f) for f in fichiers if (os.path.isfile(os.path.join(racine,f)))&(os.path.splitext(f)[1].lower() in e_documents)]
        n=len(fichiers)
        t=0
        for s in fichiers:
            t+=os.path.getsize(s)
        return [n,t]
    
    
    def images(racine):
        fichiers=os.listdir(racine)
        fichiers=[os.path.join(racine,f) for f in fichiers if (os.path.isfile(os.path.join(racine,f)))&(os.path.splitext(f)[1].lower() in e_images)]
        n=len(fichiers)
        t=0
        for s in fichiers:
            t+=os.path.getsize(s)
        return [n,t]
    
    def autres_fichiers(racine):
        fichiers=os.listdir(racine)
        fichiers=[os.path.join(racine,f) for f in fichiers if (os.path.splitext(f)[1].lower() not in e_images+e_documents) & (os.path.isfile(os.path.join(racine,f)))]
        n=len(fichiers)
        t=0
        for s in fichiers:
            t+=os.path.getsize(s)
        return [n,t]
    
    def calcule(racine):
        
        n_documents=0
        n_images=0
        n_autres=0
        t_documents=0
        t_images=0
        t_autres=0
        fichiers=os.listdir(racine)
        for f in fichiers:
            
            if os.path.isdir(f):
                
                r=calcule(os.path.join(racine,f))
                n_documents+=r[0]
                n_images+=r[1]
                n_autres+=r[2]
                t_documents+=r[3]
                t_images+=r[4]
                t_autres+=r[5]
          
                
        d=documents(racine)
        i=images(racine)
        a=autres_fichiers(racine)
        n_documents+=d[0]
        n_images+=i[0]
        n_autres+=a[0]
        t_documents+=d[1]
        t_images+=i[1]
        t_autres+=a[1]
        return [n_documents, n_images, n_autres, t_documents, t_images, t_autres]
    
    
    
    racine="/Users/usersos/Desktop/nom_repertoire"
    [n_documents, n_images, n_autres, t_documents, t_images, t_autres]=calcule(racine)
    d=dict([])
    t_totale=taille(racine)
    p_documents=(t_documents*100)/t_totale
    p_images=(t_images*100)/t_totale
    p_autres=(t_autres*100)/t_totale        
    print("Somme des pourcentages :")
    print(p_documents+p_images+p_autres)
    print("Somme des tailles :")
    print(t_documents+t_images+t_autres)
    print("Taille du répertoire racine :")
    print(t_totale)
    d["documents"]=[n_documents,t_documents,p_documents]
    d["pictures"]=[n_images,t_images,p_images]
    d["others"]=[n_autres,t_autres,p_autres]
    
    for tf in d: 
            print("{} {} use {} ({} % of total size)".format(d[tf][0],tf,d[tf][1],d[tf][2]))
    
    
    
    
    
    



    -
    Edité par sknbernoussi 13 novembre 2014 à 16:29:00

    • Partager sur Facebook
    • Partager sur Twitter

    Infos répertoire

    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
    • Editeur
    • Markdown