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 :

Problème avec glob


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé

    Profil pro
    Account Manager
    Inscrit en
    Décembre 2006
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Account Manager

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 301
    Par défaut Problème avec glob
    Bonjour,
    le code ci-dessous bloque. Pourquoi ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    import glob
    cheminTeste = "C:\\Documents and Settings\\Christophe\\Mes documents\\3,Codes Programmes v-3 Fev 2009\\Python\\Veusz [Donnees-PyQt]\\*"
    thisDir = glob.iglob(cheminTeste)
    for onePath in thisDir:  
        print onePath
    Le message d'erreur est le suivant :
    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
    Traceback (most recent call last):
      File "C:\Documents and Settings\Christophe\Mes documents\2,pyBaNaMa\CodeSource\packages\GestionCheminFichiers.py", line 31, in <module>
        lectureDossier(os.path.join('C:\\Documents and Settings\\Christophe\\Mes documents\\3,Codes Programmes v-3 Fev 2009\\Python\\Veusz [Donnees-PyQt]', '*'))
      File "C:\Documents and Settings\Christophe\Mes documents\2,pyBaNaMa\CodeSource\packages\GestionCheminFichiers.py", line 15, in lectureDossier
        for onePath in thisDir:  
      File "C:\Python26\lib\glob.py", line 41, in iglob
        for dirname in dirs:
      File "C:\Python26\lib\glob.py", line 42, in iglob
        for name in glob_in_dir(dirname, basename):
      File "C:\Python26\lib\glob.py", line 61, in glob1
        return fnmatch.filter(names, pattern)
      File "C:\Python26\lib\fnmatch.py", line 47, in filter
        _cache[pat] = re.compile(res)
      File "C:\Python26\lib\re.py", line 188, in compile
        return _compile(pattern, flags)
      File "C:\Python26\lib\re.py", line 243, in _compile
        raise error, v # invalid expression
    sre_constants.error: bad character range
    Je ne vois pas trop le caractère qui pourrait poser problème. Si quelqu'un a une idée...

  2. #2
    Membre éprouvé

    Profil pro
    Account Manager
    Inscrit en
    Décembre 2006
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Account Manager

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 301
    Par défaut
    En fait, ce sont les crochets qui posent problème. Qui peut-on contacter pour indiquer le souci s'il n'est pas contournable ? Pour moi il y en a un dans la mesure où ce type de caractères est accepté sous Windows.

  3. #3
    Membre émérite
    Avatar de Antoine_935
    Profil pro
    Développeur web/mobile
    Inscrit en
    Juillet 2006
    Messages
    883
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur web/mobile

    Informations forums :
    Inscription : Juillet 2006
    Messages : 883
    Par défaut
    Commence par échapper les crochets ouvrants avec des backslashes.

  4. #4
    Membre éprouvé

    Profil pro
    Account Manager
    Inscrit en
    Décembre 2006
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Account Manager

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 301
    Par défaut
    Le souci est que ce chemin m'est donné par le module os et du coup il y a à mes yeux un gros souci de cohérence. Non ?

    J'ai essayé ta proposition sans succès.

  5. #5
    Membre émérite
    Avatar de Antoine_935
    Profil pro
    Développeur web/mobile
    Inscrit en
    Juillet 2006
    Messages
    883
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur web/mobile

    Informations forums :
    Inscription : Juillet 2006
    Messages : 883
    Par défaut
    Il y aurait, à mon goût, un souci de cohérence si les fonctions de globbing faisaient partie du module os. Ce n'est pas le cas, donc je trouve ces différences acceptables.

    De quelle manière as-tu échappé les crochets ? De ce que je lis du message d'erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sre_constants.error: bad character range
    Il y a une erreur dans le parsing du character range, soit justement la classe de caractère entre les deux crochets, qui contient deux fois les lettres n et e. Il peut aussi s'agir du s-P, et je crois même que l'erreur est ici.

    Fais nous voir la chaîne échappée.

  6. #6
    Membre Expert
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 418
    Par défaut
    glob

    The glob module finds all the pathnames matching a specified pattern according to the rules used by the Unix shell.


    fnmatch

    This module provides support for Unix shell-style wildcards, which are not the same as regular expressions.

    Dans les expressions régulières, il y a deux manières d’échapper un caractère spécial: avec ’\’ ou avec ’[ ]’ puisque «Special characters are not active inside sets.» et que '[[]' échappe le crochet gauche.
    http://www.python.org/doc/2.5.2/lib/re-syntax.html

    \’ est d’ailleurs plus universel puisque ’[g\d]’ ou '[kl9\]' n’échappent pas le ’\’ en leur sein. Dans le deuxième cas, cela produit une erreur (la Library Reference oublie de le préciser soit dit en passant).


    Dans les pathnames, obéissant aux règles du shell Unix, il ne reste plus que 5 caractères spéciaux et une seule manière de les échapper: ’[ ]’.
    The special characters used in shell-style wildcards are:
    * matches everything
    ? matches any single character
    [seq] matches any character in seq
    [!seq] matches any character not in seq
    http://www.python.org/doc/2.5.2/lib/....html#l2h-2288

    D’où ma proposition:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ......\\Python\\Veusz [[]Donnees-PyQt]\\*"
    Inutile d’échapper le crochet droit:
    le crochet gauche n’étant plus un crochet d’ouverture d’un set ==> le crochet droit n’est plus interprété comme un caractère spécial de fermeture de set.



    NB:
    à mon avis, doubler les ’\’ dans ton chemin ne sert à rien, il ne comporte aucune séquence spéciale du genre ’\a',’\b’,’\f’ etc.


    PS:
    Je pense que le message d’erreur que tu obtiens est dû au fait que le programme interprète [Donnees-PyQt] comme un ensemble contenant les lettres ’D’,’o’,’n’,’e’,’y’,’Q’,’t’ et le range ’s-P’.

    Seulement, ’s’ est minuscule et ’P’ est majuscule, et de plus ’p’ est avant ’s’ dans l’alphabet. Donc le programme ne comprend pas le range “indiqué“.

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

Discussions similaires

  1. Problème avec glob sur un disque externe
    Par rambc dans le forum Général Python
    Réponses: 11
    Dernier message: 16/01/2010, 10h22
  2. [PERL] Problème d'espace avec glob()
    Par sephiburp dans le forum Programmation et administration système
    Réponses: 2
    Dernier message: 11/06/2009, 14h49
  3. Réponses: 1
    Dernier message: 07/02/2008, 21h40
  4. Problème avec la mémoire virtuelle
    Par Anonymous dans le forum CORBA
    Réponses: 13
    Dernier message: 16/04/2002, 16h10

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