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 :

csv et caractère d'échappement


Sujet :

Python

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    28
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2005
    Messages : 28
    Points : 26
    Points
    26
    Par défaut csv et caractère d'échappement
    Bonjour à tous,

    Je bloque depuis qques temps sur un problème de parsing d'un csv. En gros j'ai ce csv:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    BudgetAesDaoImpl.java, 51, 5, error, "Method 'budgetAesValueObjectToEntity' is not designed for extension - needs to be abstract, final or empty.", com.puppycrawl.tools.checkstyle.checks.design.DesignForExtensionCheck
    BudgetAesDaoImpl.java, 51, 128, error, "Expected @param tag for 'budgetAesValueObject'.", com.puppycrawl.tools.checkstyle.checks.javadoc.JavadocMethodCheck
    comme on peut le remarquer, sur la première ligne, j'ai une virgule dans un block de guillemet. Le but de mon application est de donner une représentation en tableau de cette structure de données. Donc typiquement ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [[BudgetAesDaoImpl.java] [51] [5] [error] [Method 'budgetAesValueObjectToEntity' is not designed for extension - needs to be abstract, final or empty.] [ com.puppycrawl.tools.checkstyle.checks.design.DesignForExtensionCheck]]....]
    le problème est que le module csv de python coupe systématiquement dés qu'il y a une virgule... la seule chose que je peux réaliser c'est mettre un caractère d'échappement devant la virgule... mais cela c'est pas possible.

    Il faudrait pour bien faire que python considère le block entre guillemet sans l'analyser mais je n'y arrive pas...

    voici le code que j'utilise:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    csv.register_dialect('monDialecte', delimiter=',', quotechar = '"',doublequote = True, skipinitialspace = False, escapechar='"')
    reader = csv.reader(open(csvFile,"rb"), 'monDialecte')
    quelqu'un aurait une idée géniale?

  2. #2
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 824
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 824
    Points : 7 120
    Points
    7 120
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    28
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2005
    Messages : 28
    Points : 26
    Points
    26
    Par défaut
    merci en effet je pense que c'est la seule solution...

    pour info voici le code que j'ai utilisé:
    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
    def _csv_parse(self, s):
            csvPattern = re.compile(r'''
                ^           # Commence au début
                ([\D\d]*)   # Essaye de trouver 0 ou + caract. num ou non-num et en fait un groupe
                ,           # Trouve une virgule
                \D*         # Trouve caract. non-numériques
                (\d*)       # Trouve caract. numérique et en fait un groupe
                ,           # Trouve une virgule
                \D*         # Trouve caract. non-numérique
                (\d*)       # Trouve caract. numérique et en fait un groupe
                ,           # Trouve une virgule
                \s*         # Trouve 0 ou + espaces
                (\D+)       # Trouve caract. non-numérique et en fait un groupe
                ,           # Trouve une virgule
                \s*         # Trouve 0 ou + espaces
                \"          # Trouve un "
                ([\D\d]+)   # Trouve 1 ou + caract. num ou non-num et en fait un groupe
                \"          # Trouve un "
                ,           # Trouve une virgule
                \s*         # Trouve 0 ou + espaces
                (\D+)       # Trouve caract. non-numérique et en fait un groupe
                $           # Fin de chaine
                ''',re.VERBOSE)
            return csvPattern.search(s).groups()
    petite remarque quand même... l'utilisation des expressions régulières est 2* plus lente que l'utilisation du module csv

  4. #4
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 824
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 824
    Points : 7 120
    Points
    7 120
    Par défaut
    En effet, mais très utile.

    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

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

Discussions similaires

  1. caractère d'échappement pour un '
    Par alexfrere dans le forum Général JavaScript
    Réponses: 20
    Dernier message: 04/07/2006, 11h07
  2. caractère d'échappement de '['
    Par Ecibat dans le forum MS SQL Server
    Réponses: 14
    Dernier message: 19/12/2005, 14h27
  3. Caractères d'échappement
    Par dl_jarod dans le forum ASP
    Réponses: 2
    Dernier message: 26/10/2005, 10h36
  4. caractéres d'échappements
    Par kleenex dans le forum Access
    Réponses: 3
    Dernier message: 27/09/2005, 12h46

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