Précédent   Forum du club des développeurs et IT Pro > Autres langages > Python & Zope > Contribuez
Contribuez Proposez vos articles, cours, tutoriels, faq, sources pour Python & Zope
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 12/04/2011, 14h58   #1
Louhike
Membre confirmé
 
Homme
Étudiant
Inscription : janvier 2009
Messages : 86
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : janvier 2009
Messages : 86
Points : 200
Points : 200
Par défaut Recherche de texte dans des fichiers à l'aide d'expressions régulières

Bonjour tout le monde,
J'ai développé un petit programme en python (projet personnel) qui affiche des lignes de fichiers si elles correspondent à une expressions régulière spécifiée.
Le programme fonctionne en ligne de commande avec les options :
-d répertoire où chercher
-e expression régulière
-x extensions des fichiers où l'on doit chercher
-r recherche des sous-dossiers (non implémenté pour l'instant)
-v mode verbeux (non implémenté pour l'instant).

Voici le code source :
http://github.com/Louhike/RegularExp...nsInADirectory

Actuellement, le programme parcourt le dossier dans la fonction main et remplit une pile des noms de fichiers trouvés. Un processus vide peu à peu cette file et recherche les lignes où l'expression régulière est validée.
Un thread gère le log sur le même principe de file. Il se contente pour l'instant d'afficher les messages dans la console.

Ma prochaine étape est de gérer plusieurs processus vidant la file des fichiers.

Il y a sûrement des meilleures façons de procéder, si vous avez des suggestions, n'hésitez pas. Vous pouvez réutiliser le code comme bon vous semble (mais ce n'est qu'un début actuellement, donc il y a sûrement beaucoup d'améliorations à faire).

EDIT : J'ai amélioré la lisibilité du code en me conformant un peu plus au PEP8 selon les conseils de o.girardot.
J'ai aussi corrigé des petites bêtises qui faisaient que le programme ne se respectait pas ce que j’annonçais au niveau des fonctionnalités (même s'il marchait), suite à des oublis. Le thread du log n'était, par exemple, pas utilisé, les messages étant directement affichés dans la console par chaque thread (alors que la classe était en place et fonctionnelle ).
Louhike est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 12/04/2011, 17h55   #2
o.girardot
Rédacteur
 
Olivier Girardot
Développeur Java
Inscription : mars 2010
Messages : 87
Détails du profil
Informations personnelles :
Nom : Olivier Girardot
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Développeur Java
Secteur : Finance

Informations forums :
Inscription : mars 2010
Messages : 87
Points : 520
Points : 520
tout d'abord, bravo pour ton travail, je vais bien sûr y jeter un coup d'oeil
Une petite suggestion quant à ton dépôt git : rajoute un fichier .gitignore avec *.pyc dedans, histoire de ne pas commiter tes fichiers de compilation.

Une petite voie d'amélioration serait aussi de se conformer un peu plus à la PEP 8 sur le style de codage.

Bonne journée à toi
o.girardot est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 12/04/2011, 19h59   #3
Louhike
Membre confirmé
 
Homme
Étudiant
Inscription : janvier 2009
Messages : 86
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : janvier 2009
Messages : 86
Points : 200
Points : 200
Citation:
Envoyé par o.girardot Voir le message
tout d'abord, bravo pour ton travail, je vais bien sûr y jeter un coup d'oeil
Une petite suggestion quant à ton dépôt git : rajoute un fichier .gitignore avec *.pyc dedans, histoire de ne pas commiter tes fichiers de compilation.

Une petite voie d'amélioration serait aussi de se conformer un peu plus à la PEP 8 sur le style de codage.

Bonne journée à toi
Merci beaucoup des commentaires et conseils, je vais tâcher de m'y appliquer. Je ne connaissais pas du tout l'astuce avec gitignore, je l'utilise depuis peu. Le PEP8 me semble un point important pour faciliter la lecture des autres, donc merci encore !

EDIT : Plusieurs corrections ont été faites et la recherche dans les sous-dossiers est désormais possible.
Louhike est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 17/04/2011, 11h42   #4
Louhike
Membre confirmé
 
Homme
Étudiant
Inscription : janvier 2009
Messages : 86
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : janvier 2009
Messages : 86
Points : 200
Points : 200
Ne pouvant plus éditer mes anciens messages, je me permet d'ajouter un message au topic pour vous faire part des dernières modifications (j'envisage de proposer le programme dans les codes sources quand il sera plus avancé pour y indiquer mes modifications, évitant ainsi de polluer le forum).
  1. J'ai modifié le nom du dépôt sur GitHub, l'adresse est maintenant https://github.com/Louhike/MatchMyRegEx.
  2. Ensuite, j'ai apporté plusieurs modifications pour faciliter la lecture du code.
    Celui-ci mélangeait des commentaires en anglais et français, ils sont maintenant tous en anglais.
    J'ai aussi utilisé l'outil pep8 pour m'assurer du réel respect du style de codage python (mais je suppose qu'il peut encore y avoir quelques coquilles). Mes modifications précédentes ne prenaient pas tout en compte.
Ma prochaine étape est de mettre en place plusieurs threads pour le traitement des fichiers (actuellement, j'ai un thread principal qui parcourt les dossiers, un autre qui affiche les messages et un autre qui traite les fichiers).
J'ai orienté mon code pour qu'il puisse en y avoir plusieurs donc cela devrait prendre peu de temps.
Ensuite, je compte m'assurer qu'il n'y a pas de meilleure façon de gérer plusieurs threads en python.
Ma gestion se base en effet sur des fonctionnalités de python 2.5, et j'aimerais voir s'il n'y a pas des meilleures manières de procéder avec python 2.7 ou 3.
Louhike est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 13h29.


 
 
 
 
Partenaires

Hébergement Web