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 :

Connaitre le chemin d'un fichier récupérer avec diff_files


Sujet :

Python

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    434
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juin 2010
    Messages : 434
    Points : 94
    Points
    94
    Par défaut Connaitre le chemin d'un fichier récupérer avec diff_files
    Bonjour à tous,

    Je voudrais savoir comment récupérer le chemin d'un fichier que j'ai récupéré avec diff_files.

    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    def _report(ctx): # Print a report on the differences between a and b
        # Output format is purposely lousy
        #print('diff', ctx.left, ctx.right)
        if ctx.left_only:
            ctx.left_only.sort()
            #print('Only in', ctx.left, ':', ctx.left_only)
            _left.append(str(ctx.left) + "\\" + ctx.left_only[0])
            #print(str(localDiff))
     
        if ctx.right_only:
            ctx.right_only.sort()
            #print('Only in', ctx.right, ':', ctx.right_only)
            _right.append(str(ctx.right) + "\\" + ctx.right_only[0])
            #print(str(nasDiff))
     
        if ctx.diff_files:
            ctx.diff_files.sort()
            #print('Differing files :', ctx.diff_files)
            _left.append(ctx.diff_files[0]) 
     
     
     
    def _report_full(ctx):
        _report(ctx)
        for sd in ctx.subdirs.values():
            _report_full(sd)
     
     
    def report_full(a, b):
     
        global _left, _right
        _left = []
        _right = []
        _report_full(filecmp.dircmp(a, b))
        return _left, _right

    J'aimerai donc pouvoir récupérer le chemin de ctx.diff_files[0] qui me retourne seulement le nom du fichier.

    Merci de votre aide

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 448
    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 448
    Points : 37 042
    Points
    37 042
    Par défaut
    notez que lorsque vous écrivez:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        if ctx.left_only:
            ctx.left_only.sort()
            #print('Only in', ctx.left, ':', ctx.left_only)
            _left.append(str(ctx.left) + "\\" + ctx.left_only[0])
    _left ne contiendra que le premier nom trouvé et pas les autres...

    Citation Envoyé par Leniouns Voir le message
    J'aimerai donc pouvoir récupérer le chemin de ctx.diff_files[0] qui me retourne seulement le nom du fichier.
    diff_files est la liste des fichiers différents.
    S'ils sont différents c'est qu'ils existent dans self.left et self.right

    - W

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    434
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juin 2010
    Messages : 434
    Points : 94
    Points
    94
    Par défaut
    _left contient tous les noms trouvés pourtant...

    Sinon pour diff_files il n'y a pas moyen de récupérer le chemin dans left et dans right ?

    Merci encore une fois pour ton aide

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 448
    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 448
    Points : 37 042
    Points
    37 042
    Par défaut
    Citation Envoyé par Leniouns Voir le message
    _left contient tous les noms trouvés pourtant...
    Il contient plus d'un fichier car il y a plus d'un répertoire.
    Testez avec un répertoire ayant au moins 2 fichiers dans left n'étant pas dans right.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sinon pour diff_files il n'y a pas moyen de récupérer le chemin dans left et dans right ?
    N'est ce pas similaire à ce que vous avez déjà fait?
    - W

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    434
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juin 2010
    Messages : 434
    Points : 94
    Points
    94
    Par défaut
    En effet j'ai testé et left ne contient que le dernier fichier différent. Comment puis je faire alors pour récupérer tous les fichiers ?

    Et pour diff_files ça me retourne seulement le nom du fichier. Moi j'aimerai bien que ça me retourne le chemin complet

    Edit :

    Avec ce code ça récupère tous les fichiers qui ne sont pas en communs j'ai l'impression

    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
    def _report(ctx): # Print a report on the differences between a and b
        # Output format is purposely lousy
        #print('diff', ctx.left, ctx.right)
        if ctx.left_only:
            ctx.left_only.sort()
            #print('Only in', ctx.left, ':', ctx.left_only)
            for file in ctx.left_only:
                #_left.append(str(ctx.left) + "\\" + ctx.left_only[0])
                _left.append(str(ctx.left) + "\\" + file)
            #print(str(localDiff))
     
        if ctx.right_only:
            ctx.right_only.sort()
            #print('Only in', ctx.right, ':', ctx.right_only)
            for file in ctx.right_only:
                #_right.append(str(ctx.right) + "\\" + ctx.right_only[0])
                _right.append(str(ctx.right) + "\\" + file)
            #print(str(nasDiff))
     
        if ctx.diff_files:
            ctx.diff_files.sort()
            #print('Differing files :', ctx.diff_files)
            _left.append(ctx.diff_files[0])

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

    Tout dépend de ce que vous voulez!

    En écrivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    left.append(ctx.diff_files[0])
    _left contiendra le premier fichier différent du répertoire "courant" mais vous avez omis d'inclure le nom du répertoire.

    Vous pourriez alléger votre code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
       if ctx.left_only:
            ctx.left_only.sort()
            #print('Only in', ctx.left, ':', ctx.left_only)
            for file in ctx.left_only:
                #_left.append(str(ctx.left) + "\\" + ctx.left_only[0])
                _left.append(str(ctx.left) + "\\" + file)
            #print(str(localDiff))
    se résume à:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
           for name in ctx.left_only + ctx.diff_files:
               _left.append(os.path.join(ctx.left, name))
    - W

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    434
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juin 2010
    Messages : 434
    Points : 94
    Points
    94
    Par défaut
    Merci avec ce code ça marche nikel

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    def _report(ctx): # Print a report on the differences between a and b
        # Output format is purposely lousy
     
        if ctx.right_only:
            ctx.right_only.sort()
            #print('Only in', ctx.right, ':', ctx.right_only)
            for file in ctx.right_only:
                #_right.append(str(ctx.right) + "\\" + ctx.right_only[0])
                _right.append(str(ctx.right) + "\\" + file)
            #print(str(nasDiff))
     
        for name in ctx.left_only + ctx.diff_files:
               _left.append(os.path.join(ctx.left, name))
    Merci une nouvelle fois de ton aide

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 18
    Dernier message: 21/03/2019, 10h13
  2. [Python 2.X] récupérer chemin d'un fichier ouvert avec askopenfile
    Par nekcorp dans le forum Tkinter
    Réponses: 4
    Dernier message: 08/06/2015, 01h10
  3. Récupérer le chemin d'un fichier avec un input file
    Par L'aigle de Carthage dans le forum Général JavaScript
    Réponses: 31
    Dernier message: 05/06/2011, 11h57
  4. Réponses: 4
    Dernier message: 30/10/2006, 19h59

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