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 :

Recherche recursive sur tous les disques


Sujet :

Python

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 40
    Par défaut Recherche recursive sur tous les disques
    Bonjours,

    J'aimerais faire un script qui fait une recherche récursive de tous les disques (C:, D:...) et inscrit dans un fichier de sortie les fichiers (chemin d'accès) qui correspondent à certains critères (date de modif...).

    Avez vous des idées pour faire cela ? notamment la recherche récursive...

    Merci d'avance !!!

  2. #2
    Membre chevronné
    Profil pro
    Ingénieur sécurité
    Inscrit en
    Février 2007
    Messages
    574
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur sécurité
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2007
    Messages : 574
    Par défaut
    Salut,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    baseDir = "/home/alex/Bureau/"
    for root, dirs, files in os.walk(baseDir):
      print root, dirs, files
    Ce code descend l'arborescence, à partir du dossier racine que tu précises. Ensuite effectue les traitements que tu veux dans le for...

  3. #3
    Membre chevronné
    Profil pro
    Ingénieur sécurité
    Inscrit en
    Février 2007
    Messages
    574
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur sécurité
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2007
    Messages : 574
    Par défaut
    Voila un lien qui à l'air de faire ce que tu veux.

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 40
    Par défaut
    Merci pour vos réponses.

    Je comprend pas trop la fonction walk. Elle parcours bien l'arborescence, mais mon but c'est de tester chaque fichier pour vérifier notamment la date de modification. Suivant cette date, je veux enregistrer le chemin complet du fichier dans un fichier de sortie.

    La fonction walk me fait un peu penser à la commande "tree" sous dos...

    Puis-je effectuer un test pour chaque fichier ?

    Merci de vos réponses.

  5. #5
    Membre émérite
    Homme Profil pro
    heu...
    Inscrit en
    Octobre 2007
    Messages
    648
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : heu...

    Informations forums :
    Inscription : Octobre 2007
    Messages : 648
    Par défaut
    SAlut, il y a des chances que tu trouve cette discussion utile, lis-la jusqu'au bout

    http://www.developpez.net/forums/d80...ltiple-listes/

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 40
    Par défaut
    Merci de votre aide.

    Cependant je ne comprend toujours pas comme faire un test sur chaque fichier avec ce genre de fonction.

    Le but est d'utiliser un "if os.path.getmtime(file) == xxx" Mais je ne vois pas quel variable utiliser dans cette fonction.

    Par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    def Tox_walk(rootPath):
            root,dirs,files = walk(rootPath).next()
            yield root
            for f in ( root + '/' +u for u in files if u[0]!=lettre and u[-1] != '~'):
                    yield f
            for d in ( u for u in dirs if u[0]!=lettre):
                for elem in Tox_walk(root + '/' + d):
                    yield elem
    Je ne vois pas ou appliquer mon test !!! J'ai vraiment du mal a visualiser la fonction.

  7. #7
    Membre émérite
    Homme Profil pro
    heu...
    Inscrit en
    Octobre 2007
    Messages
    648
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : heu...

    Informations forums :
    Inscription : Octobre 2007
    Messages : 648
    Par défaut
    Ah il faut être un peu Mc Guyver, et identifier les concepts qui te seront utiles, du reste, dans la discussion énoncée plus haut, la seule information utile est que l'utilisation d'une fonction generator récursive avec l'utilisation de os.listdir() en lieu et place d'os.walk(), se trouve être plus rapide...

    Il ressort aussi, que si il y a de nombreuse conditions de filtrage, Tyrtamos propose une fonction utile pour le programmeur (uniquement, puisqu'elle consomme plus de ressources).

    Quant à parcourir tous les disques sous windows, je ne me suis jamais penché sur la question, et à moins de connaitre tous les noms des disques, je ne vois pas trop... Il y a pourtant moyen d'en prendre connaissance dynamiquement, c'est sûr, mais je ne saurais t'aider sur ce point...

  8. #8
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 486
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Intrigué par la question, je me suis aperçu que je ne savais pas comment trouver toutes les lettres de disque sur Windows.

    Alors, à défaut de connaitre une solution "officielle", j'en ai fait une "sur le genou" qui a l'air de marcher:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    import os
     
    L = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
    drives = []
    for d in L:
        if os.path.isdir(d + ':/'):
            drives.append(d)
    print drives
    Réponse sur mon PC:

    La réponse est correcte, et c'est quasi instantanée, mais ce sont des partitions de disques durs. Je ne sais pas ce que ça donnerait en temps de réponse avec des clés USB, des disquettes, des CD, voire des disques réseau. Et je ne sais pas dire non plus à quel type de périphérique correspond chaque lettre. Mais c'est toujours ça.

    Sinon, pour le reste, il faut que tu précises un peu plus ce que tu cherches à faire. Dès que tu sors des fonctions toutes faites de Python, ça peut être très compliqué. Quels sont les filtres qui t'intéressent? En fonction de ça, je peux te donner un code de principe.

    Tyrtamos

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 62
    Par défaut clé usb
    Bonjour,

    Cela marche sans problème aussi avec les clés USB Tyrtamos. Je viens de tester çà

    François

  10. #10
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 486
    Billets dans le blog
    6
    Par défaut
    Merci vega95.

    Je viens d'essayer: en plus des clés USB, ça marche aussi avec les CD et les disques du réseau. Et la réponse reste très rapide.

    Tyrtamos

  11. #11
    Membre émérite
    Avatar de Antoine_935
    Profil pro
    Développeur web/mobile
    Inscrit en
    Juillet 2006
    Messages
    883
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur web/mobile

    Informations forums :
    Inscription : Juillet 2006
    Messages : 883
    Par défaut
    Citation Envoyé par tyrtamos Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    import os
     
    L = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
    drives = []
    for d in L:
        if os.path.isdir(d + ':/'):
            drives.append(d)
    print drives
    Artistique et efficace :p Je m'incline !

  12. #12
    Membre Expert Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Par défaut
    Bonjour,

    Citation Envoyé par cellendhyll Voir le message
    Merci de votre aide.

    Cependant je ne comprend toujours pas comme faire un test sur chaque fichier avec ce genre de fonction.

    Le but est d'utiliser un "if os.path.getmtime(file) == xxx" Mais je ne vois pas quel variable utiliser dans cette fonction.

    Par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
            for f in ( root + '/' +u for u in files if u[0]!=lettre and u[-1] != '~'):
    Je ne vois pas ou appliquer mon test !!! J'ai vraiment du mal a visualiser la fonction.
    Tu as pourtant un exemple concret sous les yeux.
    N.tox fais bien de te donner cet exemple (Cela ma remuer plus d'un méninge mais list compréhensive et fonctions génératrices sur la même page il y a de quoi au début.) : Regarde bien les exemples avec os.listdir.

    Sympa ta solution tyrtamos.

    @+

  13. #13
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 40
    Par défaut
    En fait le but et de parcourir tous les fichiers des disques locaux et de lister dans un log les fichiers (avec le chemin complet) qui ont été modifiés il y a moins de x jours.

  14. #14
    Membre chevronné
    Profil pro
    Ingénieur sécurité
    Inscrit en
    Février 2007
    Messages
    574
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur sécurité
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2007
    Messages : 574
    Par défaut
    Citation Envoyé par dahtah Voir le message
    Voila un lien qui à l'air de faire ce que tu veux.
    Suit le lien que je t'ai donné au départ. Le gars fait quasiment exactement ce que tu veux.

Discussions similaires

  1. [MySQL] Faire une recherche sur tous les champ commencant par ..
    Par bullrot dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 31/10/2008, 11h45
  2. lister tous les disques présents sur la machine
    Par contremaitre dans le forum Shell et commandes GNU
    Réponses: 5
    Dernier message: 26/08/2008, 17h56
  3. Recherche sur tous les forums active en heures creuses
    Par Anomaly dans le forum Evolutions du club
    Réponses: 7
    Dernier message: 10/05/2006, 20h38
  4. une requete effectuant une recherche sur tous les champs
    Par raynor911 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 13/02/2006, 15h06
  5. Recherche sur tous les fichiers d'un projet
    Par Kaorichan dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 28/04/2005, 11h28

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