Rechercher : dans
Par :

Affichage accents dans les listes en Python

Dernière réponse le 10 mar 2009 à 17:08:18 ugluk, le 9 fév 2009 à 20:28:44 
 Signaler ce message aux modérateurs

Bonjour,

En Python, lorsque j'utilise la méthode "append" pour ajouter des éléments à mes listes, j'ai un problème avec l'affichage des accents. Par exemple, si la valeur de ma variable est "Février", je reçois en sortie par la méthode append "F\xe9vrier". Si j'utilise la commande "print" avec la même variable, l'affichage est bon.

Quel est le problème?

Merci

Configuration: Windows XP
Firefox 3.0.6

Meilleures réponses pour « Affichage accents dans les listes en Python » dans :
Liste des ports ouverts VoirQue vous soyez sous Windows ou Linux/Unix, la commande suivante (en console) permet d'afficher la liste des ports ouverts sur votre ordinateur :netstat -a Pour des outils graphiques plus poussés, voir Quels sont les ports ouverts sur ma machine
Supprimer la liste des systèmes d'exploitation au démarrage VoirPour diverses raisons, il se peut que vous ayez le choix entre plusieurs systèmes d'exploitation au démarrage du PC. Si cela a été réglé sciemment par l'utilisateur (par exemple, faute de compatibilité avec les anciens jeux, on a installé deux...
Processus Windows - Introduction VoirIntroduction aux processus Dans un souci de modularité Microsoft Windows est architecturé en services (processus) fonctionnant en arrière-plan. Il est possible d'afficher la liste des processus en cours dans le gestionnaire des tâches en appuyant...

1

Rocky_123, le 9 fév 2009 à 20:31:14

Salut, c'est normal, ce qui est retourné est un objet string. Cet objet est codé. La fonction print se charge de décoder pour afficher.

Répondre à Rocky_123

2

ugluk, le 9 fév 2009 à 20:40:18

Y'a-t-il un moyen alors de décoder l'objet string via la méthode append ou faut-il absolument extraire l'objet de la liste et le faire imprimer par print pour que l'affichage soit correct?

Répondre à ugluk

3

Rocky_123, le 9 fév 2009 à 20:42:38

Dans un programme on se sert en général de print pour afficher des résultats, pourquoi vouloir passer directement par l'objet? Puis cette chaîne tu dois l'afficher où? Sur la console? Dans une interface graphique?

Répondre à Rocky_123

4

ugluk, le 9 fév 2009 à 20:58:36

En fait, j'utilise "print" mais pour afficher la valeur de la variable mise à jour par "append". Je voulais juste savoir s'il était possible d'afficher directement cette variable avec les bons caractères sans en extraire les éléments un à un.

exemple:

t3=['Janvier']

t3.append('Février']

print t3


La sortie va donner ['Janvier', 'F\xe9vrier'].

Est-il possible d'avoir directement la sortie: ['Janvier', 'Février']?

Répondre à ugluk

5

Rocky_123, le 9 fév 2009 à 21:15:58

Là tu affiche un objet liste qui utilise lui même des objets chaîne, donc codés. Essaie de mettre peut être au début du code source :

#  -*- coding=latin-1 -*-

Répondre à Rocky_123

6

ugluk, le 9 fév 2009 à 21:37:30

Bien entendu, c'est la première chose que j'ai essayé avant de "poster" ce problème. J'ai même essayé plusieurs codages (utf-8, etc...)

Ça ne change rien...

Répondre à ugluk

7

sebsauvage, le 10 fév 2009 à 09:11:54

A lire impérativement concernant tes problème d'accents:
http://sebsauvage.net/python/charsets_et_encoding.html

Répondre à sebsauvage

8

@robaze, le 10 fév 2009 à 14:38:11

Salut seb,
dis moi sais-tu comment je peux transformer une liste en chaine de caractere?
voici mon code:
def mdp_aleat():
print "Combien de caracteres?",
nb_caract=int(raw_input())
mdp=nb_caract*[0]
val=nb_caract*[0]
for i in range (nb_caract):
val[i]=random.randrange(random.randrange(48,90),random.randrange(97,122))
mdp[i]=chr(val[i])
print val, mdp
print "Mot de passe=",mdp

malheuresement, mdp me retourne une liste ms moi je voudrai recuperer une chaine de caratère.
Merci

Répondre à @robaze

9

sebsauvage, le 10 fév 2009 à 14:43:20

print "Mot de passe=","".join(mpd)

Répondre à sebsauvage

10

@robaze, le 10 fév 2009 à 14:52:27

Merci

Répondre à @robaze

11

ugluk, le 10 fév 2009 à 16:43:41

Alors je dois conclure que je ne peux pas afficher directement une liste avec des éléments comprenant des accents, il faut que j'extraie les éléments et que je passe par print pour chaque élément pour avoir un affichage décodé? C'est ça?

Répondre à ugluk

12

sebsauvage, le 10 fév 2009 à 17:06:31

Non.
Pas besoin.

Exemple de code:

#!/usr/bin/python
# -*- coding: iso-8859-1 -*-

maliste = [u"bébé",u"tété",u"mémé"]
print ' ; '.join(maliste)



et dans une fenêtre Dos, je lance mon programm qui s'affiche très bien:
c:\3>python a.py
bébé ; tété ; mémé

Répondre à sebsauvage

13

ugluk, le 10 fév 2009 à 17:19:49

Ça marche lorsqu'il n'y a que des mots dans la liste. Le problème c'est que ma liste comprend des "strings" et des "integer"... ce que la fonction "join" ne semble pas supporter:

TypeError: sequence item 1: expected string or Unicode, int found

Répondre à ugluk

14

sebsauvage, le 10 fév 2009 à 17:26:10

Ah ben oui, quand on mélange des pommes et des bananes :-)

#!/usr/bin/python
# -*- coding: iso-8859-1 -*-

maliste = [u"bébé",u"tété",5,u"mémé"]
print ' ; '.join( [unicode(i) for i in maliste] )

Répondre à sebsauvage

15

ugluk, le 10 fév 2009 à 17:37:49

Lol, merci!

Avoue qu'y fallait le savoir... ;)

Répondre à ugluk

16

@robaze, le 10 fév 2009 à 17:50:19

Dis moi seb,

val[i]=random.randrange(0,127)
mdp[i]=chr(val[i])

ces 2 lignes me permette de récupérer les caractères correspondant au code ascii.

ce code fonctionne bien, par contre je voudrais elimer certain caractere de la liste. Par ex je voudrai pas que les caractere de valeur entre 0 à 47, 58 à 63, 91 à 96 et 123 à 127 apparaissent dans la listes des caractère possible, en gros je voudrais que le choix aléatoire des caractère se fasse que dans les valeurs 48 à 57, 64
à 70, et 97 à 122. Comment je fais pour les éliminer?
merci

Répondre à @robaze

17

sebsauvage, le 10 fév 2009 à 21:52:54

Voilà ce que je te propose:

valeurs = range(48,58) + range(64,71) + range(97,123)
print valeurs

valeurhasard = random.choice(valeurs)
print valeurhasard


valeurs est la liste des valeurs qu'on veut utiliser.
random.choice() va choisir un élément au hasard dans cette liste.

Répondre à sebsauvage

19

@robaze, le 12 fév 2009 à 18:30:33

Slt seb,
di moi connaitrai tu une fonction qui permettrai de rafraichir un label??
merci.

Répondre à @robaze

20

sebsauvage, le 12 fév 2009 à 22:38:29
Répondre à sebsauvage

21

@robaze, le 1 mar 2009 à 19:11:16

Salut seb,
di moi je suis en train de faire un programme en python et j'aimerai savoir si tu connaissai 3 fonctions simples qui me permettrai d'arreter, de redemarer et de mettre en veille mon pc.??

Merci

Répondre à @robaze

22

@robaze, le 1 mar 2009 à 19:16:43

En faite desolé j'ai pas repondu a ta derniere question. En faite j'ai créer un label avec Qtdesigner que je convertit en python et dans ce label j'affiche l'heure courante mais le probleme c'est que je n'arrive pas a raffaichir les seconde au fur et a mesure qu'elles passe. En gros j'arrive pas a rafraichire l'heure.du gerne il est 19h10 et 5 min apres je veux que ca se raffraichisse et qu'il y ai affiche sur le label 19h15. Si t a une idéée ce serai gentil.
Merci

Répondre à @robaze

23

 PetitPimousse, le 10 mar 2009 à 17:08:18

Dans le programme d'exemple de sebsauvage, la modification du label est condition au clic sur un bouton.
Comment faire une interface qui ne soit qu'un affichage du statut du script python ?

En gros, je lance mon script, et je veux qu'une "boite de dialogue" apparaisse, indiquant les évolutions du scripts et les traitements en cours, puis qui disparaisse à la fin du traitement.
Finalement, que je puisse modifier le label dès l'apparition de la fenêtre ( dès le mainloop() ?) sans action de la part de l'utilisateur.

PetitPimousse.

Répondre à PetitPimousse

18

@robaze, le 10 fév 2009 à 23:31:04

Merci

Répondre à @robaze