Partage
  • Partager sur Facebook
  • Partager sur Twitter

Extraction d'une partie d'un chemin

Sujet résolu
    8 septembre 2022 à 13:25:47

    Bonjour,

    Je dispose d'un fichier texte (report.log) avec plein de lignes. J'extrait l'une d'entre elles dans laquelle se trouve un chemin qui m'intéresse dont je veux récupérer le titre d'un fichier. Pour l'heure, je peine à extraire la partie du chemin qui m'intéresse.

    Ce que j'ai :

    Generated file: G:\NavDB\0_Production\ATAT_K8494A\AB01\FMS220_ATR\PROD\ATR2_AZUN_\2209\3\DATA\ATR2_AZUN_22093.dat  soit le contenu de la ligne qui m'intéresse grâce à un premier bout de code. 

    Ce que je veux :

    récupérer la partie ATR2_AZUN_22093.dat du chemin. 

    Voici mes premières lignes de code :

    import os, shutil

    os.chdir(r"\\avstlsmutdbp03p\NavDB\0_Production\ATAT_K8494A\AB01\FMS220_ATR\PROD\ATR2_AZUN_\2209\3\LOG")

    with open ("report.log","r")as f:

        print (":".join(f.readlines()[41:42]))

    Je continue à chercher. N'hésitez pas à revenir vers moi.

    -
    Edité par Etudiant31 8 septembre 2022 à 13:28:04

    • Partager sur Facebook
    • Partager sur Twitter
      8 septembre 2022 à 14:58:02

      Bonjour.

      chemin = r"G:\NavDB\0_Production\ATAT_K8494A\AB01\FMS220_ATR\PROD\ATR2_AZUN_\2209\3\DATA\ATR2_AZUN_22093.dat"
      fichier = chemin.split("\\")[-1:][0]

      ce qui donne :

      chemin --> 'G:\\NavDB\\0_Production\\ATAT_K8494A\\AB01\\FMS220_ATR\\PROD\\ATR2_AZUN_\\2209\\3\\DATA\\ATR2_AZUN_22093.dat'
      
      fichier --> 'ATR2_AZUN_22093.dat'
      • Partager sur Facebook
      • Partager sur Twitter

      PB68

        8 septembre 2022 à 15:09:42

        PB68 a écrit:

        Bonjour.

        chemin = r"G:\NavDB\0_Production\ATAT_K8494A\AB01\FMS220_ATR\PROD\ATR2_AZUN_\2209\3\DATA\ATR2_AZUN_22093.dat"
        fichier = chemin.split("\\")[-1:][0]

        ce qui donne :

        chemin --> 'G:\\NavDB\\0_Production\\ATAT_K8494A\\AB01\\FMS220_ATR\\PROD\\ATR2_AZUN_\\2209\\3\\DATA\\ATR2_AZUN_22093.dat'
        
        fichier --> 'ATR2_AZUN_22093.dat'


        Non surtout pas. C'est sale et pas robuste

        path = pathlib.PureWindowsPath('G:\\NavDB\\0_Production\\ATAT_K8494A\\AB01\\FMS220_ATR\\PROD\\ATR2_AZUN_\\2209\\3\\DATA\\ATR2_AZUN_22093.dat')
        
        print(path.parts[-1])



        -
        Edité par Nephthys 8 septembre 2022 à 15:10:07

        • Partager sur Facebook
        • Partager sur Twitter
          8 septembre 2022 à 16:01:10

          Nephthys a écrit:

          path = pathlib.PureWindowsPath('G:\\NavDB\\0_Production\\ATAT_K8494A\\AB01\\FMS220_ATR\\PROD\\ATR2_AZUN_\\2209\\3\\DATA\\ATR2_AZUN_22093.dat')
          
          print(path.parts[-1])

          -
          Edité par Nephthys il y a 39 minutes


          Merci pour cette réponse, j'ai jamais utilisé mais c'est bien pratique !!!

          -
          Edité par PB68 8 septembre 2022 à 16:01:33

          • Partager sur Facebook
          • Partager sur Twitter

          PB68

            8 septembre 2022 à 16:50:58

            Bonjour,

            Pourquoi c'est sale ?

            Pourquoi c'est pas robuste ?

            • Partager sur Facebook
            • Partager sur Twitter
              8 septembre 2022 à 16:56:54

              Merci messieurs, vous m'avez donné un coup de main. 

              Je bute sur un autre problème en rapport avec ça mais je préfère dans un premier temps chercher par moi-même. 

              -
              Edité par Etudiant31 8 septembre 2022 à 16:57:21

              • Partager sur Facebook
              • Partager sur Twitter
                8 septembre 2022 à 17:17:41

                Si on est certain de la présence du \:
                chemin[chemin.rindex('\\')+1:]
                • Partager sur Facebook
                • Partager sur Twitter

                Le Tout est souvent plus grand que la somme de ses parties.

                  8 septembre 2022 à 21:13:06

                  Salut !

                  Eh beh, mes prédécesseurs sont à la ramasse aujourd'hui ?

                  import os
                  os.path.basename(r'C:\Python310\vcruntime140_1.dll')
                  'vcruntime140_1.dll'


                  Avec IDLE tu peux avoir accès au liste des fonctions en appuyant sur tabulation :

                  Une autre fonctionnalité intéressante est d'utiliser dir(object) :

                  C'était les astuces du jour !

                  • Partager sur Facebook
                  • Partager sur Twitter
                    9 septembre 2022 à 9:16:37

                    ErispoeLeNarvalo a écrit:

                    Salut !

                    Eh beh, mes prédécesseurs sont à la ramasse aujourd'hui ?

                    import os
                    os.path.basename(r'C:\Python310\vcruntime140_1.dll')
                    'vcruntime140_1.dll'


                    Non, non, c'est juste qu'on doit aimer se compliquer la vie !!!

                    Eh comme on dit, toutes les routes mènent à Rome !!! ........ (au rhum aussi :):):))

                    -
                    Edité par PB68 9 septembre 2022 à 9:16:58

                    • Partager sur Facebook
                    • Partager sur Twitter

                    PB68

                      9 septembre 2022 à 10:00:18

                      Bonjour PB68,

                      tu ne m'as toujours pas dit pourquoi c'est sale et pas robuste .... :-)

                      • Partager sur Facebook
                      • Partager sur Twitter
                        9 septembre 2022 à 12:01:50

                        Phil_1857 a écrit:

                        Bonjour PB68,

                        tu ne m'as toujours pas dit pourquoi c'est sale et pas robuste .... :-)


                        Désolé mais c'est Nephthys qui le pense.

                        Moi, j'ai juste indiqué que j'avais apprécié sa réponse car je ne connaissais pas le module "pathlib".

                        • Partager sur Facebook
                        • Partager sur Twitter

                        PB68

                          9 septembre 2022 à 13:07:20

                          ah oui, pardon, c'est Nephthys

                          • Partager sur Facebook
                          • Partager sur Twitter
                            9 septembre 2022 à 14:45:32

                            Phil_1857 a écrit:

                            tu ne m'as toujours pas dit pourquoi c'est sale et pas robuste .... :-)


                            Si on écrit os.path.basename(path), pas besoin de documenter ce qu'on fait (contrairement à path.split('\\')[-1][0]). L'autre intérêt est que ceux qui ont écrit la bibliothèque auront traité les cas limites (voir le code source).

                            Dans cette optique, il faudrait écrire path.name (l'équivalent d'os.path.basename pour pathlib) et non path.parts[-1]. C'est aussi dégueu qu'un path.split('\\')[-1][0] puisqu'il faut encore le documenter en faisant attention aux cas limites.

                            • Partager sur Facebook
                            • Partager sur Twitter
                              12 septembre 2022 à 16:21:59

                              Merci messieurs, c'est bon pour moi.

                              Avec mes recherches puis vos aides, j'ai fini par trouver. A force de persévérance...

                              • Partager sur Facebook
                              • Partager sur Twitter
                                12 septembre 2022 à 17:21:31

                                Pour ton autre question (cf sujet fermé parce que tu as mis une image au lieu d'utiliser le bouton </> pour insérer ton code) mais je mets la réponse ici parce que c'est sur la même problématique). tu cherches à avoir du coup la première partie du chemin

                                Il faut utiliser os.dirname() => os.dirname(r"c:/temp/toto.txt") => "c:/temp"

                                os.chdir ne renvoie rien, mais os.getcwd() retourne le chemin de travail actuel https://docs.python.org/fr/3/library/os.html#os.getcwd 

                                On peut aussi utiliser filepath,filename=os.path.split(r"c:/temp/toto.txt") pour récupérer directement les 2 https://docs.python.org/fr/3/library/os.path.html#os.path.split 

                                • Partager sur Facebook
                                • Partager sur Twitter
                                  13 septembre 2022 à 12:02:59

                                  Phil_1857 a écrit:

                                  ah oui, pardon, c'est Nephthys


                                  Toutes les fonctions de Pathlib et os.path sont valides cross-plateforme. Le séparateur Windows est \ mais sur Unix c'est /. Donc faire un split en hardcodant le séparateur c'est prendre le risque de ne pas avoir le bon résultat si l'utilisateur l'exécute sur une autre plateforme. 

                                  Pareil, il ne faut pas s'amuser à utiliser des + et / pour créer des chemins mais utiliser os.path.join ou Pathlib.

                                  -
                                  Edité par Nephthys 13 septembre 2022 à 12:03:15

                                  • Partager sur Facebook
                                  • Partager sur Twitter

                                  Extraction d'une partie d'un chemin

                                  × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                  • Editeur
                                  • Markdown