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 :

Débutant en Python : comment surveiller un répertoire pour déclencher une action


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    ex-informaticien photographe
    Inscrit en
    Septembre 2021
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : ex-informaticien photographe
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Septembre 2021
    Messages : 37
    Par défaut Débutant en Python : comment surveiller un répertoire pour déclencher une action
    Salut à tous, je suis un ex-informaticien qui se reconvertit dans la photo. J'ai fait de la programmation avec toutes sortes de langages dans ma prime jeunesse mais depuis 15 ans je faisais du décisionnel donc BO, Microstrategy, ETL divers... Sans oublier du SQL bien sur !

    Pour ma nouvelle activité j'ai un besoin très spécifique : lors de séances photos dans les écoles j'ai un grand nombre d'élèves à photographier et le tri des photos est plutôt rébarbatif ensuite, avec un risque d'erreur non négligeable !
    Je voudrais donc faire une petite appli pour :
    - Récupérer la liste des élèves depuis un fichier (txt, csv, Excel... Peu importe) qui serait affiché dans une interface très simple permettant de sélectionner l'élève que je vais prendre en photo. Voire même soyons fou charger mes listes d'élèves dans une petite base MySql par exemple, ce qui simplifierait peut-être les choses...
    - Surveiller l'arrivée des photos dans un répertoire spécifique et renommer les fichiers au fur et à mesure avec le nom de l'élève sélectionné dans la liste et une numérotation si plusieurs photos

    Je suis sous Windows.

    Je me disais qu'on devait pouvoir faire ça avec Python ? Merci de votre aide !!!

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 738
    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 738
    Par défaut
    Salut,

    Citation Envoyé par Vincent-vr Voir le message
    Je me disais qu'on devait pouvoir faire ça avec Python
    A la base, c'est un problème de "programmation": on commence par reformuler le besoin en quelque chose de plus comestible par l'univers des machines en le découpant en une suite d'activités à réaliser.

    Puis on le reformule ce travail de conception avec son langage préféré...

    Ce qui ne présente pas de difficulté si on le maîtrise.
    On peut même faire une conception plus ou moins neutre vis à vis du langage qu'on va utiliser.

    note: et j'oubliais de signaler que s'agissant de données personnelles, il faut voir dans quelle mesure l'application sera conforme aux lois en vigueur (du côté CNIL).

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

  3. #3
    Membre averti
    Homme Profil pro
    ex-informaticien photographe
    Inscrit en
    Septembre 2021
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : ex-informaticien photographe
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Septembre 2021
    Messages : 37
    Par défaut
    Certes...
    Sauf qu'en tant que particulier je n'ai pas de langage préféré ! J'ai fait du développement dans des environnements pros sur des gros et moyens systèmes : AS400, BULL... Je pense pas que le RPG ou le Cobol soient des choix pour une appli Windows D'où l'idée de me mettre au Python... Donc en plus clair : peut-on surveiller un répertoire avec Python ? Pour le reste je n'ai pas trop d'inquiétude

  4. #4
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 738
    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 738
    Par défaut
    Citation Envoyé par Vincent-vr Voir le message
    Donc en plus clair : peut-on surveiller un répertoire avec Python ? Pour le reste je n'ai pas trop d'inquiétude
    La façon la plus simple est de regarder son contenu à intervalle régulier...

    Plus compliqué sera d'utiliser des fonctionnalités systèmes qui peuvent être event-driven et de récupérer une bibliothèque qui permet de l'utiliser pour le programmeur Python.

    - 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 830
    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 830
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par Vincent-vr Voir le message
    Donc en plus clair : peut-on surveiller un répertoire avec Python ?
    Tout à fait. os.listdir(rep) te donne la liste de ce qui se trouve dans le dossier "rep". Un coup de os.stat() te permet d'analyser la nature d'un fichier style "est-il vrai fichier ou alors dossier?" (car pour un OS tout ce qui se trouve sur le disque est "fichier" et simplement certains fichiers ne sont pas de même nature que d'autres). Ensuite tu peux enrober tout ça dans une boucle infinie en lui mettant une tempo à base de time.sleep() pour éviter qu'elle ne tourne à 60000 tours/secs (dont 59999 fois pour rien) et tu as ton outil de surveillance.

    Ensuite si tu veux te lancer dans le haut de gamme, alors tu y rajoutes une surcouche IHM (par exemple PyQt) dans laquelle tu peux y mettre un timer pour qu'il ne s'active qu'à intervalles réguliers. Voire mettre ton outil en zone de notification pour qu'il ne s'ouvre que quand quelque chose le mérite et voilà...
    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
    Invité
    Invité(e)
    Par défaut
    Salutation !

    Toujours aussi excellent ce Tim Golden : http://timgolden.me.uk/python/win32_...r_changes.html

    3 méthodes pour le prix d'une !

    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    import os
     
    import win32file
    import win32event
    import win32con
     
    path_to_watch = os.path.abspath (".")
     
    #
    # FindFirstChangeNotification sets up a handle for watching
    #  file changes. The first parameter is the path to be
    #  watched; the second is a boolean indicating whether the
    #  directories underneath the one specified are to be watched;
    #  the third is a list of flags as to what kind of changes to
    #  watch for. We're just looking at file additions / deletions.
    #
    change_handle = win32file.FindFirstChangeNotification (
      r'C:\Users\***\Desktop',
      0,
      win32con.FILE_NOTIFY_CHANGE_FILE_NAME
    )
     
    #
    # Loop forever, listing any file changes. The WaitFor... will
    #  time out every half a second allowing for keyboard interrupts
    #  to terminate the loop.
    #
    try:
     
      old_path_contents = dict ([(f, None) for f in os.listdir (path_to_watch)])
      while 1:
        result = win32event.WaitForSingleObject (change_handle, 500)
     
        #
        # If the WaitFor... returned because of a notification (as
        #  opposed to timing out or some error) then look for the
        #  changes in the directory contents.
        #
        if result == win32con.WAIT_OBJECT_0:
          new_path_contents = dict ([(f, None) for f in os.listdir (path_to_watch)])
          added = [f for f in new_path_contents if not f in old_path_contents]
          deleted = [f for f in old_path_contents if not f in new_path_contents]
          if added: print("Added: ", ", ".join (added))
          if deleted: print("Deleted: ", ", ".join (deleted))
     
          old_path_contents = new_path_contents
          win32file.FindNextChangeNotification (change_handle)
     
    finally:
      win32file.FindCloseChangeNotification (change_handle)

  7. #7
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 830
    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 830
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par LeNarvalo Voir le message
    Toujours aussi excellent ce Tim Golden : http://timgolden.me.uk/python/win32_...r_changes.html
    old_path_contents = dict ([(f, None) for f in os.listdir (path_to_watch)])
    Dommage ces crochets inutiles => old_path_contents = dict ((f, None) for f in os.listdir (path_to_watch)).

    Et ce n'est pas anodin comme erreur. Les crochets (listes) entrainent une génération complète de la liste avant évaluation. Alors que sans les crochets, cela donne un itérable qui est alors évalué durant l'itération. Et si l'évaluation amène une certitude, alors elle est interrompue ce qui optimise le truc.
    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
    21
    22
    23
    24
    25
    def fct(n):
    	print(n)
    	return n==5
     
    >>> print(any([fct(x) for x in range(10)]))
    0
    1
    2
    3
    4
    5
    6
    7
    8
    9
    True
     
    >>> print(any(fct(x) for x in range(10)))
    0
    1
    2
    3
    4
    5
    True
    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]

Discussions similaires

  1. Réponses: 5
    Dernier message: 10/08/2011, 11h16
  2. comment surveiller un répertoire à distance?
    Par rainy_kll dans le forum Développement de jobs
    Réponses: 2
    Dernier message: 08/07/2010, 18h04
  3. Réponses: 2
    Dernier message: 31/12/2008, 12h16
  4. Réponses: 7
    Dernier message: 21/10/2004, 09h13
  5. [PowerAMC] Comment s'en servir pour creer une base?
    Par Elmilouse dans le forum Access
    Réponses: 2
    Dernier message: 27/07/2004, 09h53

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