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 de fichier dans différent repertoire


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Février 2016
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2016
    Messages : 65
    Par défaut recherche de fichier dans différent repertoire
    Bonjour,

    comme dit dans un précédent poste je suis un débutant en Python. et je dois dire que je commence a apprécier ce langage.
    voila. je dois contrôler la présence d' un groupe de fichier a partir d'un répertoire racine en descendant dans différent sous répertoire.
    répertoire racine : /volume2/sauvegardes/obm

    dans ce répertoire "obm" racine, il y a des sous répertoires client. c'est ici que ça se corse pour moi.
    dans chaque répertoire client il y a 3 sous répertoire, annuel, mensuel et quotidienne.

    il faudrait que je contrôle dans chaque répertoire client, la présence des fichiers (*carbase_dp1.dmp" "*carbase_dp2.dmp" "*carbase_dp3.dmp" "*carbase_dp4.dmp" "*newcarbase_dp1.dmp" "*newcarbase_dp2.dmp" "*newcarbase_dp3.dmp" "*newcarbase_dp4.dmp" "*fairbill_dp1.dmp" "*fairbill_dp2.dmp" "*fairbill_dp3.dmp" "*fairbill_dp4.dmp" "*genesys_dp1.dmp" "*genesys_dp2.dmp" "*genesys_dp3.dmp" "*genesys_dp4.dmp), dans le repertoire client et loguer ceux qui sont absent.

    en résumé contrôle dans /volume2/sauvegardes/obm/client/quotidienne/

    voici le code que j'ai fais pour le moment, merci d'avance :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    import os
     
    def listdirs(rootdir):
        for it in os.scandir(rootdir):
            if it.is_dir():
                print(it.path)
                listdirs(it)
     
    rootdir = '/volume2/sauvegardes/obm'
    listdirs(rootdir)

  2. #2
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 865
    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 865
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par bibiho Voir le message
    voici le code que j'ai fais pour le moment, merci d'avance
    Heureusement que je t'ai dit que les codes se postaient entre balises pour qu'ils soient lisibles. C'est d'ailleurs écrit dans les règles. Merci d'avance.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  3. #3
    Membre actif
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Février 2016
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2016
    Messages : 65
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    Bonjour

    Heureusement que je t'ai dit que les codes se postaient entre balises pour qu'ils soient lisibles. C'est d'ailleurs écrit dans les règles. Merci d'avance.
    oups desolé je viens de modifier mon post

  4. #4
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 790
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 790
    Par défaut
    Citation Envoyé par bibiho Voir le message
    voici le code que j'ai fais pour le moment
    Vérifier que les fichiers d'une liste sont bien présents dans une liste de répertoires... c'est vérifier que les fichiers sont bien présents dans chaque répertoire.

    Ce qui se ramène à écrire une fonction F qui prend en paramètre répertoire et liste de fichiers pour retourner la liste des fichiers qui ne sont pas dans le répertoire et recommencer avec le répertoire suivant.

    Quand j'ai écris çà, j'ai une idée du code que je veux et si je rencontre des difficultés à réaliser un bout je peux montrer ce que j'ai essayé de faire pour traduire l"intention de départ *après* avoir parcouru la FAQ et cherché un peu sur le ouèbe.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 865
    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 865
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par bibiho Voir le message
    voila. je dois contrôler la présence d' un groupe de fichier a partir d'un répertoire racine en descendant dans différent sous répertoire.
    répertoire racine : /volume2/sauvegardes/obm
    Et tu ne voudrais pas le faire en bash ???

    Citation Envoyé par bibiho Voir le message
    dans chaque répertoire client il y a 3 sous répertoire, annuel, mensuel et quotidienne.
    il faudrait que je contrôle dans chaque répertoire client...
    Si tu cherches tes fichiers au niveau du client, pourquoi parles-tu de ces sous-répertoires qui y sont peut-être mais qui n'influent/n'impactent en rien ???

    Citation Envoyé par bibiho Voir le message
    en résumé contrôle dans /volume2/sauvegardes/obm/client/quotidienne/
    Ah ok. Donc ce n'est pas dans le répertoire client qu'il faut contrôler mais dans le sous-dossier "quotidienne" dudit répertoire (et probablement aussi dans les deux autres "annuel" et "mensuel"). Déjà décrire les choses avec précision évite à tout le monde de perdre du temps à partir dans une mauvaise direction.

    Citation Envoyé par bibiho Voir le message
    et je dois dire que je commence a apprécier ce langage.
    Certes, mais Python n'est pas oblugé de tout faire (surtout que comme je l'ai dit, j'ai l'impression qu'on va refaire en Python ce qui t'a donné tant de mal en shell). Rien n'interdit de faire du mix et de te faire aider en Python par le shell. Par exemple tu pourrais faire un script Python qui checke un client (donc il va checker les 3 dossiers "annuel", "mensuel" et "quotidienne" du client) et ensuite, le shell te permet de boucler dans tous les clients et pour chacun d'eux, tu appelles ton script Python ... ou alors si le script Python sait boucler dans ses arguments reçus, on l'appelle une fois avec tous les clients en liste...

    Exemple
    Code python : 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
    #!/usr/bin/env python3
     
    import os
     
    def checke_dossier(d=".", fic=()):
    	yield ("%s/%s" % (d, f) for f in fic if f not in os.scandir(d))
     
    def checke_client(c=".", fic=()):
    	for sub in ("annuel", "mensuel", "quotidienne"):
    		yield from checke_dossier("%s/%s" % (c, sub), fic)
    # checke_client()
     
    if __name__ == "__main__":
    	import sys
     
    	for c in sys.argv[1:]:
    		for r in checke_client(c, ("passwd", "group")):
    			for f in r: print(f)
    	# for
    # if

    Je nomme ce script "toto.py" et je l'appelle ainsi: ./toto.py clientA clientB /volume2/sauvegardes/obm/clientC (donc j'ai des dossiers "clientA", "clientB" et "/volume2/sauvegardes/obm/clientC") et les fichiers cherchés sont (chez-moi) "passwd" et "group". Et il ressort tous les fichiers qui n'y sont pas.. Et si on veut forcer un path (style path="/volume2/sauvegardes/obm" ben tout dépend du niveau de granularité que l'on veut. Si on veut la granularité la plus fine (des fonctions qui marchent de partout) on le force dans le main
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    if __name__ == "__main__":
    	import sys
     
    	path="/volume2/sauvegardes/obm"
    	for c in sys.argv[1:]:
    		for r in checke_client("%s/%s" % (path, c), ("passwd", "group")):
    			for f in r: print(f)
    	# for
    # if
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  6. #6
    Membre actif
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Février 2016
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2016
    Messages : 65
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    Et tu ne voudrais pas le faire en bash ???


    Si tu cherches tes fichiers au niveau du client, pourquoi parles-tu de ces sous-répertoires qui y sont peut-être mais qui n'influent/n'impactent en rien ???


    Ah ok. Donc ce n'est pas dans le répertoire client qu'il faut contrôler mais dans le sous-dossier "quotidienne" dudit répertoire (et probablement aussi dans les deux autres "annuel" et "mensuel"). Déjà décrire les choses avec précision évite à tout le monde de perdre du temps à partir dans une mauvaise direction.


    Certes, mais Python n'est pas oblugé de tout faire (surtout que comme je l'ai dit, j'ai l'impression qu'on va refaire en Python ce qui t'a donné tant de mal en shell). Rien n'interdit de faire du mix et de te faire aider en Python par le shell. Par exemple tu pourrais faire un script Python qui checke un client (donc il va checker les 3 dossiers "annuel", "mensuel" et "quotidienne" du client) et ensuite, le shell te permet de boucler dans tous les clients et pour chacun d'eux, tu appelles ton script Python ... ou alors si le script Python sait boucler dans ses arguments reçus, on l'appelle une fois avec tous les clients en liste...

    Exemple
    Code python : 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
    #!/usr/bin/env python3
     
    import os
     
    def checke_dossier(d=".", fic=()):
    	yield ("%s/%s" % (d, f) for f in fic if f not in os.scandir(d))
     
    def checke_client(c=".", fic=()):
    	for sub in ("annuel", "mensuel", "quotidienne"):
    		yield from checke_dossier("%s/%s" % (c, sub), fic)
    # checke_client()
     
    if __name__ == "__main__":
    	import sys
     
    	for c in sys.argv[1:]:
    		for r in checke_client(c, ("passwd", "group")):
    			for f in r: print(f)
    	# for
    # if

    Je nomme ce script "toto.py" et je l'appelle ainsi: ./toto.py clientA clientB /volume2/sauvegardes/obm/clientC (donc j'ai des dossiers "clientA", "clientB" et "/volume2/sauvegardes/obm/clientC") et les fichiers cherchés sont (chez-moi) "passwd" et "group". Et il ressort tous les fichiers qui n'y sont pas.. Et si on veut forcer un path (style path="/volume2/sauvegardes/obm" ben tout dépend du niveau de granularité que l'on veut. Si on veut la granularité la plus fine (des fonctions qui marchent de partout) on le force dans le main
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    if __name__ == "__main__":
    	import sys
     
    	path="/volume2/sauvegardes/obm"
    	for c in sys.argv[1:]:
    		for r in checke_client("%s/%s" % (path, c), ("passwd", "group")):
    			for f in r: print(f)
    	# for
    # if
    Bonjour,

    OK, donc tu me preconiserais de faire un combo entre python et shell, la raison pour laquelle je suis partis sous python, est que je dois envoyé un état par client, si les fichier sont present ou pas. sur cette environnement je n'ai pas le droit de configurer un postfix et n'a pas la commande "mail -s " classic de linux. alors que python se debrouille seul

  7. #7
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 865
    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 865
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par bibiho Voir le message
    OK, donc tu me preconiserais de faire un combo entre python et shell
    Le shell c'est un peu le sens de la vie d'un unixien. Si on réfléchit bien, il fait tout en shell. Ok il appelle "ls", fait du grep, du awk, mais tout ce ciment qui lie ces différents travaux c'est le shell. Et Python, comme tout outil Unix, s'intègre parfaitement dans cet écosystème.

    Citation Envoyé par bibiho Voir le message
    alors que python se debrouille seul
    A condition qu'il y ait les libs d'installées. Mais effectivement il possède beaucoup de libs d'installées d'office.

    Toutefois il se pourrait aussi que l'environnement qu'on te donne ne soit pas adapté au travail imposé. On te dit "fait un programme qui envoie un mail" mais t'as pas la commande "mail". Quelque part il y a un peu une incohérence et tu pourrais la faire remonter...

    Sinon tu peux continuer mon script. Tu auras remarqué que je travaille par granularité. J'ai d'abord écrit une fonction qui checke un dossier. Elle ne se préoccupe absolument pas du dossier à checker, elle se contente de le checker. Puis j'ai écrit une fonction qui checke un client. Le client, lui, doit avoir 3 dossiers particuliers à checker. Puis un main qui checke n clients passés en paramètre.
    Ben on peut remplacer le main par une fonction chargée de checker un environnement particulier, environnement qui doit avoir n clients précis. Et on passe juste l'environnement au main. Et etc etc.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  8. #8
    Membre actif
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Février 2016
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2016
    Messages : 65
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    Le shell c'est un peu le sens de la vie d'un unixien. Si on réfléchit bien, il fait tout en shell. Ok il appelle "ls", fait du grep, du awk, mais tout ce ciment qui lie ces différents travaux c'est le shell. Et Python, comme tout outil Unix, s'intègre parfaitement dans cet écosystème.


    A condition qu'il y ait les libs d'installées. Mais effectivement il possède beaucoup de libs d'installées d'office.

    Toutefois il se pourrait aussi que l'environnement qu'on te donne ne soit pas adapté au travail imposé. On te dit "fait un programme qui envoie un mail" mais t'as pas la commande "mail". Quelque part il y a un peu une incohérence et tu pourrais la faire remonter...

    Sinon tu peux continuer mon script. Tu auras remarqué que je travaille par granularité. J'ai d'abord écrit une fonction qui checke un dossier. Elle ne se préoccupe absolument pas du dossier à checker, elle se contente de le checker. Puis j'ai écrit une fonction qui checke un client. Le client, lui, doit avoir 3 dossiers particuliers à checker. Puis un main qui checke n clients passés en paramètre.
    Ben on peut remplacer le main par une fonction chargée de checker un environnement particulier, environnement qui doit avoir n clients précis. Et on passe juste l'environnement au main. Et etc etc.
    En effet l'environnement que l'on ma donnée n' a pas les fonction de base Linux (pstfix, ssmtp, etc...). Donc je dois faire avec.
    Je vois en effet ce que tu as fait et t'en remercie. je vais partir de cette base et je reviens vers ou pour te montrer ce que j'aurais réussi ou pas à faire!!

Discussions similaires

  1. [AC-2010] Recherche de fichier dans un repertoire et sous repertoire
    Par boldair67 dans le forum VBA Access
    Réponses: 4
    Dernier message: 03/03/2017, 13h24
  2. Réponses: 6
    Dernier message: 09/06/2009, 18h38
  3. recherche de fichier dans un repertoire
    Par dz_robotix dans le forum Linux
    Réponses: 2
    Dernier message: 13/04/2007, 18h30
  4. Recherche de fichiers dans un repertoire par multicritères
    Par frederic.go dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 11/09/2006, 22h57

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