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 :

caracteres speciaux (') dans une chaine de caractere


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2022
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2022
    Messages : 21
    Par défaut caracteres speciaux (') dans une chaine de caractere
    Bonjour,

    je développe des plugin sous QGIS
    et j'ai un soucis pour récupérer des caractères spéciaux.

    exemple de code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    nomG = "route d'ivoir"   --> apostrophe
    layer.selectByExpression(" NOM_RUE_G = '{}'".format(nomG))
    j'ai un soucis d'apostrophe dans nomG qui n'est pas prit en compte.
    j'ai mis un exemple avec un code qgis mais c'est le mème principe avec un simple print je pense.

    merci.

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 759
    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 759
    Par défaut
    Salut,

    Si on teste:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    >>> nomG = "route d'ivoir"
    >>> " NOM_RUE_G = '{}'".format(nomG)
    " NOM_RUE_G = 'route d'ivoir'"
    donc ça fonctionne et votre prose n'éclaire pas trop sur le problème rencontré.

    Qu'est ce qu'attend .selectByExpression? Y a-t-il un message d'erreur?
    note: vous ne demandez pas de l'aide pour faire un exercice, on s'attend donc à ce que vous sachiez un minimum programmer...

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2022
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2022
    Messages : 21
    Par défaut
    Effectivement dans la console ça ne pose pas de pb.

    selectByExpression : c'est une requête de sélection en fonction de paramètres.
    en gros ça va me chercher tous les tronçons de route qui remplissent le condition "NOM_RUE_G = "nomG
    cette requête marche bien sur les noms sans apostrophes mais pas sur ceux avec.

  4. #4
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 759
    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 759
    Par défaut
    Citation Envoyé par gerome88 Voir le message
    cette requête marche bien sur les noms sans apostrophes mais pas sur ceux avec.
    Certes mais comment passer des quotes (simples ou doubles) au selectByExpression de QGIS est une question QGIS. Normalement la syntaxe est documentée et il doit y avoir des exemples sur Internet.

    A défaut, poser la question dans un forum QGIS et/ou attendre qu'une expertise passe dans le coin (mais c'est pas le titre qui va indiquer qu'on a besoin de lui).

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    Membre Expert
    Avatar de MPython Alaplancha
    Homme Profil pro
    Paysan à 3 francs six sous
    Inscrit en
    Juin 2018
    Messages
    923
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Paysan à 3 francs six sous
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juin 2018
    Messages : 923
    Billets dans le blog
    8
    Par défaut
    Bonjour,
    Je ne connais absolument pas QGIS. Cependant avec une recherche avec les termes "QGIS Character Escaping" , on trouve par exemple https://gis.stackexchange.com/questi...rophes-in-qgis
    ?

  6. #6
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 840
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par gerome88 Voir le message
    cette requête marche bien sur les noms sans apostrophes mais pas sur ceux avec.
    C'est un problème qui ressemble fort à ceux qu'on a en SQL quand on veut insérer des chaines avec apostrophes. Comme l'apostrophe est un identificateur de chaine, quand on tente un truc comme insert into table(lieu) values('presqu'ile de truc') on voit immédiatement le souci.

    C'est pour ça que les librairies bdd possèdent toutes (en tout cas psycopg2 pour Postgres depuis Python la possède) un outil "escape_string" dont le rôle est de protéger les apostrophes. Grosso-modo la chaine presqu'ile devient presqu''ile ce qui donne alors insert into table(lieu) values('presqu''ile de truc') et là ça fonctionne.

    Or QGis est très associé à SQL en général et plus particulièrement Postgres/Postgis. Il est donc très probable qu'il possède un outil analogue (à chercher dans la doc). Sinon au pire tu passes par psycopg2.escape_string().
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  7. #7
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2022
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2022
    Messages : 21
    Par défaut
    j'ai reformater la chaine en doublant les apostrophes pour que ma requête considère que c'est un caractère spécial, du coup ça marche.
    c'est correct d'un point de vu programmation ?
    newnomG = nomG.replace('\'','\'\'')

  8. #8
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 759
    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 759
    Par défaut
    Citation Envoyé par gerome88 Voir le message
    c'est correct d'un point de vu programmation ?
    Si ça fonctionne, c'est correct. Après si la question est de savoir s'il y a de meilleures méthodes pour arriver au même résultat0... Certainement!
    Il n'y a même pas besoin de replace:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    >>> nomG = "route d''ivoir"
    >>> f"NOM_RUE_G = '{nomG}'"
    "NOM_RUE_G = 'route d''ivoir'"
    >>>
    mais les opérations sur les chaines de caractères sont dans tous les tutos! Si vous avez envie de progresser sur le sujet, relire les chapitres qui vont bien de votre tuto préféré...

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  9. #9
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 840
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par gerome88 Voir le message
    newnomG = nomG.replace('\'','\'\'')
    Tu n'as pas besoin de backslasher les quotes simples si tu utilises les quotes doubles pour exprimer ta chaine.
    Python autorise les deux types de quotes, afin justement de pouvoir utiliser l'une ou l'autre comme simple caractère si besoin => print('il a crié "assez" mais...') ou print("Il fait beau aujourd'hui").

    Donc newnomG = nomG.replace("'", "''").

    Citation Envoyé par wiztricks Voir le message
    Il n'y a même pas besoin de replace:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    >>> nomG = "route d''ivoir"
    Ben oui mais son but était de passer de une quote à deux quotes. Si tu crées la chaine avec directement deux quotes dès le départ oui bien évidemment qu'il n'a pas besoin de replace. Ni même de ton exemple vu qu'il ne correspond pas à ses données initiales...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

Discussions similaires

  1. Caractères spéciaux dans une chaîne
    Par Eric93 dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 20/12/2007, 13h48
  2. Suppression espace et caractère spéciaux dans une chaine de caractère
    Par arnaud036 dans le forum Shell et commandes GNU
    Réponses: 5
    Dernier message: 12/10/2007, 10h51
  3. Problème avec des caractères spéciaux dans une chaine
    Par thibaut06 dans le forum Général JavaScript
    Réponses: 11
    Dernier message: 20/11/2006, 16h46
  4. Réponses: 3
    Dernier message: 24/04/2006, 15h53
  5. [RegEx] caractère spéciaux dans une chaine
    Par BigBarbare dans le forum Langage
    Réponses: 3
    Dernier message: 12/04/2006, 11h53

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