IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

probleme calcul taille dossiers


Sujet :

Python

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Ingénieur après-vente
    Inscrit en
    Février 2016
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur après-vente

    Informations forums :
    Inscription : Février 2016
    Messages : 2
    Points : 0
    Points
    0
    Par défaut probleme calcul taille dossiers
    Bonjour a tous,

    je compte ecrire un petit script pour faire du monitoring sur des disques. Ca commence plutot mal ( je debute ):

    1- je cherche a faire une simple boucle sur un repertoire pour calculer la taille de tous les sous repertoires (sur un seul niveau)
    ==> mon probleme: en comparant avec un du -s je m'apercoi que certaines tailles sont fausses...

    voici le "code":
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
     
    import os.path, sys
    path = sys.argv[1]
    listDir =  os.walk(path).next()[1]
     
    for i in listDir:
         fullpath = path + '/' + i
         size = 0.0
         for root, dirs, files in os.walk(fullpath):
              for fichiers in files:
                   size += os.path.getsize(os.path.join(root,fichiers))
         print size / (1024*1024)
    ==> j'imagine qu'il y a une erreure dans ma boucle mais j'ai beau chercher je ne trouve pas.

    Quelqu'un aurait il une idee?

    Merci d'avance!

  2. #2
    Expert éminent

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 302
    Points : 6 782
    Points
    6 782
    Par défaut
    Salut,

    Ceci existe dans le module shutil: https://docs.python.org/3/library/sh...til.disk_usage


    EDIT: Je vois que disk_usage retourne l'usage du disque entier.

    Pour ton code, ceci devrait suffire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    import os.path, sys
    path = sys.argv[1]
     
    size = 0.0
    for root, dirs, files in os.walk(path):
        for file_ in files:
            print(file_)
            size += os.path.getsize(os.path.join(root,file_))
    print(size)
    Au passage, os.walk.next() retourne une erreur.

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Ingénieur après-vente
    Inscrit en
    Février 2016
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur après-vente

    Informations forums :
    Inscription : Février 2016
    Messages : 2
    Points : 0
    Points
    0
    Par défaut
    Salut,


    Dans le code que tu me proposes je recupere la taille du repertoire de "path" ; ce que je cherchais a faire c'etait recuperer la taille de chacun des repertoires de "path", d'ou la boucle "for i in listDir".

    Je vais essayer avec le modul shutil, merci beaucoup pour les conseils!

    Cdt,

  4. #4
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 721
    Points : 31 044
    Points
    31 044
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par wilfried85 Voir le message
    Dans le code que tu me proposes je recupere la taille du repertoire de "path" ; ce que je cherchais a faire c'etait recuperer la taille de chacun des repertoires de "path", d'ou la boucle "for i in listDir".
    Bonjour

    Son traitement est plus modulaire donc plus universel. Ce qui ne t'empêche pas de le récupérer pour l'appliquer sur chacun des répertoires de "path"...

  5. #5
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 894
    Points : 7 250
    Points
    7 250
    Par défaut
    En essayant d'être assez solide, j'arrive à un code assez correct dans sa compréhension,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    import os
    import sys
     
    def get_size_directory(directory):
        size = 0
        files = os.listdir(directory) # liste de tous fichiers, répertoires, ...
        path = None # Dans le cas où files est vide
        for f in files:
            path = os.path.join(directory, f) # Joint répertoire et fichier pour chemin absolu
            if not os.path.isdir(path): # Si pas un répertoire, on peut ajouter taille du fichier
                try:
                    size += os.path.getsize(path)
                except OSError: # fichier non accessible (des fois même avec les droits)
                    print("chemin inaccessible: {}".format(path))
            else: # Sinon on refait le taf pour le répertoire
                get_size_directory(path)
        if path: # Si files non vide
            res[directory] = size
     
    res = {}
    arg = sys.argv[1] # On prend le 1er argument après le fichier lors de l'exécution
    if not os.path.isdir(arg):
        sys.exit("{} n'est pas un répertoire !".format(arg))
    get_size_directory(arg) # Enregistrement des résultats dans res
    for directory in res:
        print("{}: {}".format(directory, res[directory]))

Discussions similaires

  1. Calcul taille de dossier > 20 Go
    Par seb-65 dans le forum Langage
    Réponses: 14
    Dernier message: 05/07/2012, 09h35
  2. [LG] Problème calcul de trinome
    Par shinryu666 dans le forum Langage
    Réponses: 3
    Dernier message: 24/09/2005, 09h38
  3. Problème de taille avec les tables
    Par Angelico dans le forum Paradox
    Réponses: 2
    Dernier message: 27/12/2004, 18h38
  4. probleme de taille de title bar
    Par Daniel Spring dans le forum C++Builder
    Réponses: 1
    Dernier message: 15/11/2004, 17h26
  5. [Memo] Probleme de taille...
    Par NoisetteProd dans le forum Composants VCL
    Réponses: 2
    Dernier message: 27/08/2003, 11h42

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo