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 :

faire un deplacement de fichier jusqu'a épuisement


Sujet :

Python

  1. #1
    Nouveau Candidat au Club
    Femme Profil pro
    Lycéen
    Inscrit en
    Mai 2020
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 21
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Mai 2020
    Messages : 3
    Points : 1
    Points
    1
    Par défaut faire un deplacement de fichier jusqu'a épuisement
    bonjour,

    je suis tout nouvelle sur ce forum,je vous sollicite car j'ai un petit problème que j'essaie de résoudre.
    je vous explique mon projet:
    j'ai 3 dossiers nommé:
    entrée
    sortie
    et standbye

    je cherche a faire la copie de fichier un par un du dossier entrée vers sortie, seulement si dans standbye ne se trouve aucun fichier txt.j'ai fais un bout de code qui à l'air de fonctionner,mais le fameux soucis c'est que tout les fichiers situé dans entrée sont copié dans sortie.je désire que la copie se fasse que sur un fichier des lors que dans stand bye il n' y a rien. des lors qu'un nouveau fichier se situe dans standbye, cela met la boucle en attente, puis des que standbye n'a plus de fichier txt ,une copie du fichier s'effectue et cela jusqu'a épuisement.

    voici mon code:
    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
     
    import os.path
    import time
    import glob
    import shutil
     
     
    source_path = os.path.abspath("C:/Users/maison/Desktop/entrée/")
    source = os.listdir(source_path)
    destination = os.path.abspath("C:/Users/maison/Desktop/sortie/")
     
    while 1: 
    	essai = glob.glob("C:/Users/maison/Desktop/standbye/*.txt")
     
    	if len(essai)==0:
    	    	break
     
    print("ok")
     
    for files in source:
         if files.endswith(".txt"):
     
             shutil.move(os.path.join("C:/Users/maison/Desktop/entrée/",files), destination)
    merci pour votre aide car je ne sais pas du tout comment faire pour effectuer un copie à la fois ,quel critère utilisé.

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 355
    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 355
    Points : 36 883
    Points
    36 883
    Par défaut
    Salut,

    Citation Envoyé par neymi0807 Voir le message
    merci pour votre aide car je ne sais pas du tout comment faire pour effectuer un copie à la fois ,quel critère utilisé.
    Si vous aviez utilisé glob.glob pour récupérer les fichiers d'extension .txt, plutôt que de tout récupérer via os.listdir, pas besoin de "trier" les .txt à l'intérieur de la boucle et recopier le premier fichier de source aurait suffit.

    Avec le code actuel ajouter un "break" pour sortir de la boucle après avoir copié le premier fichier .txt qui se présente suffirait.

    Mais les boucles avec "continue" et "break", c'est quelque chose qu'on apprend dans les tutos.

    - W

  3. #3
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 309
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 309
    Points : 12 817
    Points
    12 817
    Par défaut
    Bonjour,

    Le code n'est pas terrible, mais bon passons pour l'instant.

    Si ta boucle while tu l'as mettait à l'intérieur du if de la boucle for, ça donnerait quoi ?

  4. #4
    Membre éclairé
    Homme Profil pro
    BTS SN IR
    Inscrit en
    Mai 2017
    Messages
    514
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : BTS SN IR

    Informations forums :
    Inscription : Mai 2017
    Messages : 514
    Points : 704
    Points
    704
    Par défaut
    bonjour,

    vous pouvez regarder du coté de ionotify, watchdog (ou autre) pour gérer cela de manière événementielle, mais bonne chance

    il faut que vous vérifiez la présence d'un fichier de lock (vos fichiers standbye) à chaque fois que vous déplacez un fichier (avant ou après ça ça reste à définir)

    Je ne suis sur pas sur que l'utilisation de la boucle for sur votre liste issue de glob soit pertinente ici dans le sens où il s'agit plus d'une boucle while que for pour moi (rien n'interdit un fichier de disparaître à tout moment), mais je ne suis pas sur d'avoir compris toute la problématique.

    un algorithme pourrait être
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    boucle infinie/ tant que vrai
        si il y a un fichier dans standbye
            j'attends quelques secondes
        sinon
            si je trouve un fichier à déplacer
                je le déplace
            sinon
               j'attends quelques secondes

  5. #5
    Nouveau Candidat au Club
    Femme Profil pro
    Lycéen
    Inscrit en
    Mai 2020
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 21
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Mai 2020
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    bonjour,

    j'ai essayé de tenir compte de vos remarques,mais effectivement c'est pas encore top.
    j'ai zappé des choses.maintenant j'ai mon dossier complet "entrée" qui est copié dans "sortie" alors qu'avec le code précédent en ayant modifié le while,je me suis retrouvé effectivement a faire une copie unitaire.
    d'autre part le code ne se met pas en attente tant que le fichier est présent dans "standbye".

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    source = glob.glob("C:/Users/maison/Desktop/entrée/*.txt")
    destination = os.path.abspath("C:/Users/maison/Desktop/sortie/")
    print(source)
     
    essai = glob.glob("C:/Users/maison/Desktop/standbye/*.txt")
    print(essai)	
    if (len(essai))==0:	    	
     
        while 1:
     
            shutil.move(os.path.join("C:/Users/maison/Desktop/A/"), destination)

  6. #6
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 355
    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 355
    Points : 36 883
    Points
    36 883
    Par défaut
    Salut,

    Ecrivez d'abord ce que çà doit faire "en français" puis traduisez le n Python.
    Tant qu'il y a un fichier dans "stanbye" s'écrirait:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    while glob.glob(".../standbye/*.txt"):
          time.sleep(0.5)
    - W

  7. #7
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 309
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 309
    Points : 12 817
    Points
    12 817
    Par défaut
    Ah ouais, on vient de plus loin que je pensais...

    Quand je disais de bouger la boucle while, je ne parlais pas juste de la ligne while mais du bloc complet.

    Après, suis le conseil de wiztricks, car le souci ici, n'est pas le langage, c'est plutôt la partie algorithmique.

  8. #8
    Membre expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 890
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 890
    Points : 3 729
    Points
    3 729
    Par défaut
    Salut,

    Je ne suis pas sûr d'avoir bien compris mais voilà une petite modification de votre code :

    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
     
    import os.path
    import time
    import glob
    import shutil
     
    path = "C:/Users/maison/Desktop"
    source = glob.glob(path+"/entrée/*.txt")
    destination = os.path.abspath(path + "/sortie")
     
    i = 0
    nbr_fichiers = len(source)
    while i < nbr_fichiers:
        essai = glob.glob(path + "/standbye/*.txt")    
        if len(essai) == 0:  # if not essai :
            shutil.move(os.path.join(path+"/entrée/", source[i]), destination)
            i += 1    
     
        time.sleep(1)
     
    print("ok")

  9. #9
    Nouveau Candidat au Club
    Femme Profil pro
    Lycéen
    Inscrit en
    Mai 2020
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 21
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Mai 2020
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    merci a tous pour vos contribution,mais je voulais préciser une petite chose.
    ce n'est pas du tout évident en ce moment avec toute la période de confinement de suivre des cours en informatique (lycée)car je devais voir les boucles avec cet exercice.au démarrage ,j'ai fait ce que j'ai pu,mais j'aime comprendre ce que je fais.
    je suis aussi désolé d'avoir un tel niveau .

  10. #10
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 355
    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 355
    Points : 36 883
    Points
    36 883
    Par défaut
    Salut,

    Citation Envoyé par neymi0807 Voir le message
    car je devais voir les boucles avec cet exercice.au démarrage ,j'ai fait ce que j'ai pu,mais j'aime comprendre ce que je fais.
    je suis aussi désolé d'avoir un tel niveau.
    Prenez des initiatives, ouvrez un tuto. le Swinnen est très bien... et lire le chapitre sur les boucles et conditions, faire quelques exercices, ... vous avez du temps profitez en.

    - W

Discussions similaires

  1. Réponses: 22
    Dernier message: 12/10/2005, 11h54
  2. deplacer un fichier
    Par fraizas dans le forum Langage
    Réponses: 4
    Dernier message: 12/10/2005, 11h28
  3. [SimpleXML] Comment faire pour transformer un fichier XML en PHP ?
    Par magic8392 dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 23/09/2005, 16h22
  4. [TP]comment faire pour lire un fichier son
    Par sovo dans le forum Turbo Pascal
    Réponses: 1
    Dernier message: 19/09/2004, 19h33
  5. [debutant]quoi fair pour recompiler un fichier .java
    Par nouaman dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 27/05/2004, 09h10

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