Partage
  • Partager sur Facebook
  • Partager sur Twitter

expression régulière sur chemin (windows)

    28 août 2014 à 9:19:11

    Bonjour,

    Dans un script python (python 3.4), je voudrais remplacer des chemins par une autre chaine dans un fichier donné. Le problème, c'est que dans mon fichier, le chemin est donné certaines fois avec la lettre en majuscule, d'autre fois avec une minuscule. Exemple

    C:\Program Files (x86)\Inkscape

    ou

    c:\Program Files (x86)\Inkscape

    Je voudrais les remplacer par la même chaine. Je voudrais utiliser les expressions régulières, j'ai essayé:

    AbsPathNotSensitive = re.compile(AbsolutePath, re.IGNORECASE)
    AbsPathNotSensitive.sub(ToReplaceBy, OriginalText)

    Mais avec les "backslashes" ça n'interprète pas. J'ai alors essayé

    AbsPathNotSensitive = re.compile(AbsolutePath.encode('unicode-escape'), re.IGNORECASE)
    AbsPathNotSensitive.sub(ToReplaceBy, OriginalText)

    mais ça n'interprète pas non plus...

    Je ne sais plus quoi faire, mais je me dis que cela doit être un problème déjà rencontré par quelqu'un

    Une idée? Merci

    Claude





    • Partager sur Facebook
    • Partager sur Twitter
      28 août 2014 à 9:43:25

      Eh bien la méthode lower() pourrait être utile:

      Exemple:

      >>>path="C:\Program Files\"
      >>>print(path.lower())
      c:\program files\
      • Partager sur Facebook
      • Partager sur Twitter
      Bevet Breizh! Breizh dizalc'h! Betek an trec'h! Ha mallozh ruz d'ar c'hallaoued! Trouvez votre voie
      Anonyme
        28 août 2014 à 9:56:27

        Mais ca met tout en lower() !

        Je te propose ceci :

        import re
        
        ma_regex = r"[cC]?:[\\/]+[.+][\\/]+"
        chaine_a_traiter = r"C:/Programs Files (x86)/"
        if re.match(ma_regex, chaine_a_triater) is not None:
            # Si l'expression est dans la chaîne
            # Ou alors, plus intuitivement
            print("Chemin ok!")

        pour vérifier ta chaine. Tu as la regex, à toi de faire le changement dans tes chaines (dans le bloc du 'if').

        -
        Edité par Anonyme 28 août 2014 à 10:02:51

        • Partager sur Facebook
        • Partager sur Twitter
          28 août 2014 à 10:11:58

          C'est pas ça le but? Si c'est pour mettre juste le début, alors:

          >>>path="C:\Program Files"
          >>>path=path[0].lower()+path[1:]
          >>>print(path)
          c:\Program Files\
          • Partager sur Facebook
          • Partager sur Twitter
          Bevet Breizh! Breizh dizalc'h! Betek an trec'h! Ha mallozh ruz d'ar c'hallaoued! Trouvez votre voie
          Anonyme
            28 août 2014 à 10:30:28

            Et les antishlaches comment tu les remplacent autrement que par regex en / ?
            • Partager sur Facebook
            • Partager sur Twitter
              28 août 2014 à 10:54:26

              Merci pour les infos.

              Je préfère utiliser les reg exp. Et j'ai dit que je devais traiter les chemins commençant par "c" ET "C".

              Avec la solution de Python34, je retombe dans un des problèmes que j'ai eu par rapport aux "raw string". La chaîne à traiter provient d'un argument du programme, je ne peux donc pas le faire précéder d'un "r". C'est pourquoi j'ai utilisé

              AbsolutePath.encode('unicode-escape')

              Mais je ne sais pas si ça fonctionne.

              Après, mon problème n'est pas de trouver la chaîne, mais de remplacer les 2 types par la même chaine

              • C:\Program Files (x86)\Inkscape -> $(INKSCAPE_DIR)
              • c:\Program Files (x86)\Inkscape -> $(INKSCAPE_DIR)
              • Partager sur Facebook
              • Partager sur Twitter

              expression régulière sur chemin (windows)

              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
              • Editeur
              • Markdown