Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
829 connectés 

  FORUM HardWare.fr
  Programmation
  Python

  [Résolu]Signe non reconnu dans une boucle

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Résolu]Signe non reconnu dans une boucle

n°1425717
magicdvil
Posté le 15-08-2006 à 22:00:09  profilanswer
 

bonjour,
 
je cherche à exclure certains éléments d'une variable grace à une boucle et une liste pour
crée une nouvelle variable sans ces éléments

Code :
  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3. v = 'la variable contient \ ² /  *  ?  "  < > | '
  4. liste = ['²','/','\\',':','*','?','"','<','>',"|"]
  5. test = ''
  6. for e in v :
  7. if e not in liste :
  8.  test = test + e
  9. print test
  10. if '²' in liste :
  11. print '² est dans la liste'
  12. if '²' in v :
  13. print '² est dans la variable'


résultat :
 
la variable contient  ²            
² est dans la liste
² est dans la variable
 
L'élément '²' est bien reconnu dans la variable ainsi que dans la liste.
Pourquoi pas dans la boucle ?


Message édité par magicdvil le 23-08-2006 à 22:47:58
mood
Publicité
Posté le 15-08-2006 à 22:00:09  profilanswer
 

n°1425744
masklinn
í dag viðrar vel til loftárása
Posté le 15-08-2006 à 22:58:13  profilanswer
 

et si tu remplaçais '\' par '\\'?
 
(accessoirement, c'est assez pourri comme méthode [:pingouino])

n°1425749
magicdvil
Posté le 15-08-2006 à 23:06:31  profilanswer
 

Ce n'est pas le '\' mais bien le '²' qui me pose problème.
Dans le résultat 'la variable contient  ²' le '\' a bien été exclut.

Message cité 1 fois
Message édité par magicdvil le 15-08-2006 à 23:07:05
n°1425754
masklinn
í dag viðrar vel til loftárása
Posté le 15-08-2006 à 23:10:46  profilanswer
 

magicdvil a écrit :

Ce n'est pas le '\' mais bien le '²' qui me pose problème.
Dans le résultat 'la variable contient  ²' le '\' a bien été exclut.


T'es gentil jeanlouis, mais '\' c'est un caractère d'échappement dans les strings Python (et dans les strings de la majorité des langages accessoirement), donc tu fais ce que je te demande et après on voit pour le reste [:pingouino]

n°1425773
magicdvil
Posté le 15-08-2006 à 23:25:40  profilanswer
 

Mais bien sûr Ben-Hur que je suis gentil , pour ton information, dans la variable il y a un espace entre chaque caractères après le 'contient' d'où le '\' n'est pas un caractère d'échappement mais bien un caractère à par entière


Message édité par magicdvil le 16-08-2006 à 06:40:34
n°1427373
magicdvil
Posté le 18-08-2006 à 16:52:57  profilanswer
 

Personne d'autre pour me donner un coup de pouce ?

n°1430096
Kristoph
Posté le 23-08-2006 à 17:30:50  profilanswer
 

Euh, tu a mis la déclaration d'encodage UTF-8 dans ton fichier, est tu sur et certain à 100% que ton fichier soit au format UTF-8 ?
 
Si oui, cherche pas plus loin, converti toutes tes chaines de charactère en unicode et teste à nouveau ( remplace les '...' par u'...' )

n°1430242
magicdvil
Posté le 23-08-2006 à 21:46:17  profilanswer
 

bonjour,
j'ai remplacé la variable "liste" par ceci : [u'²',u'/',u'\\',u':',u'*',u'?',u'"',u'<',u'>',u"|"]
 
resultat : UnicodeDecodeError: 'ascii' codec can't decode byte 0xc2 in position 0: ordinal not in range(128)


Message édité par magicdvil le 23-08-2006 à 21:46:40
n°1430272
Kristoph
Posté le 23-08-2006 à 22:42:12  profilanswer
 

Remplace toutes les chaînes de la même façon. Tout unicode ou rien unicode :) Fait le aussi pour v et pour les 2 lignes if '²' in
 
Pas besoin pour les print

n°1430273
magicdvil
Posté le 23-08-2006 à 22:47:00  profilanswer
 

Merci Kristoph pour cette aide efficace, problème résolu.

mood
Publicité
Posté le 23-08-2006 à 22:47:00  profilanswer
 

n°1430275
Kristoph
Posté le 23-08-2006 à 22:52:09  profilanswer
 

Au fait, as tu compris pourquoi tu avais ton erreur dans la première version ? ;)

n°1430332
magicdvil
Posté le 24-08-2006 à 07:12:59  profilanswer
 

Malheureusement non, et je cherche aussi une commande ou un moyen de transformer la variable "v" en unicode

n°1430370
Kristoph
Posté le 24-08-2006 à 09:45:58  profilanswer
 

Bah en fait, ton fichier code source est en UTF-8. Ceci veux dire que tous les charactères non ASCII ( ASCII le vrai, celui avec comme numero de symbole < 128 ) sont codés sur 2 octets au moins. Quand tu fais alors for e in v: au moment de passer sur le ², tu vas en fait faire 2 iterations ( au moins ), une pour le charactère d'échapement UTF-8, l'autre pour le charactère qui va représenter ². Malheureusement, aucun de ces 2 charactères ne va passer le test de if e in liste:, seule la concaténation de ces 2 charactères le peut.
 
Et pour convertir une chaine de charactère en unicode, c'est très facile. Si la chaine est en utf-8, tu fait chaine.decode('utf-8'), si elle est en latin1 tu fais chaine.decode('latin1') et si elle est en vrai ASCII, il suffit de faire unicode(chaine) ou chaine.decode('ascii')


Message édité par Kristoph le 24-08-2006 à 09:59:41
n°1430379
magicdvil
Posté le 24-08-2006 à 09:53:35  profilanswer
 

Merci pour tout, je suis au boulot actuellement, je teste cela se soir.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Python

  [Résolu]Signe non reconnu dans une boucle

 

Sujets relatifs
[RESOLU][CSS] Problème de float[Résolu] [C#.Net] Passer un argument à partir d'une page Web
résolu [API win32] probleme avec un petit exercice[Résolu] Mon site n'est plus centré sous IE
[Résolu] Centrage CSS et liste à image de fond[Résolu] [C#.Net] FileUpload ne marche avec certains types de fichiers
[RESOLU]Aligner Verticalement un texte en milieu de Cellule[RESOLU] Aide pour finaliser code
[Résolu] modification d'une struct managée par un filtre directshow[RESOLU] Aide passage asp en php
Plus de sujets relatifs à : [Résolu]Signe non reconnu dans une boucle


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR