Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 26/12/2011, à 12:47

Ismatus

Python encoding list

Bonjour tout le monde
 
    une liste de chaine de caracteres ne fonctionne pas ,ça concerne une liste des chaines de caracteres qui contient des elements en "é" ou "à" , alors quand j'affiche un element tout seul , ça s'affiche bien car j'ai deja en haut de mon code:   

#-*- coding:Utf-8 -*-

   , mais quand je veux afficher ma liste avec :   

print malistedechaine

   ça affiche :   

['Bureau', 'T\xc3\xa9l\xc3\xa9chargement']

  .


    j'ai ajouté ça :   

listtest.append(chaine1.decode('utf-8'))
listtest.append(chaine2.decode('utf-8'))

puis aprés j'ai essayé d'ajouter :   

   chaine2.decode('UTF-8','strict')
chaine1.decode('UTF-8','strict')  

   

  mais sans resultats , ça affiche parfois :

[u'Bureau', u'T\xe9l\xe9chargement']


   Voila tout mon code de test :

 #!/usr/bin/env python
#-*- coding:Utf-8 -*-



from Tkinter import *
import Tkinter as tk
import tkFileDialog
import os
import ttk
import tkMessageBox
import psycopg2
from PIL import Image, ImageTk
import Image 
import ImageTk 
import os.path


chaine1 = "Bureau"
chaine2 = "Téléchargement"

listtest = []

listtest.append(chaine1)
listtest.append(chaine2)

chaine2.decode('UTF-8','strict')
chaine1.decode('UTF-8','strict')
print listtest[1]

print chaine2

print listtest
  

      Merci bien pour votre réponses

Hors ligne

#2 Le 26/12/2011, à 12:49

J5012

Re : Python encoding list

ca ne serait pas plutot encode ?

Hors ligne

#3 Le 26/12/2011, à 13:38

Ismatus

Re : Python encoding list

Bonjour J5012 ,

  Merci bien pour ta réponse , ben non , si je mets encode là , ça affiche comme le code que j'ai posté :

UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 1: ordinal not in range(128)

    Peux tu voir pourquoi ça ? essaie de tester le code que j'ai posté , merci bien ami .

Hors ligne

#4 Le 26/12/2011, à 13:48

Shyne

Re : Python encoding list

Salut,

Je comprend pas bien ton problème.

Tu voudrais faire quoi exactement avec ces chaines de caractères?

Dernière modification par Shyne (Le 26/12/2011, à 13:51)

Hors ligne

#5 Le 26/12/2011, à 13:52

Ismatus

Re : Python encoding list

Bonjour Shyne smile

  Merci bien pour me répondre , oui quand je fais listtest[1] ça affiche bien :

Téléchargement

  , mais je veux afficher toute la liste , et je veux le resultat :

['Bureau', 'Téléchargement']

.
  Par contre avec mon code j'ai le resultat :

['Bureau', 'T\xc3\xa9l\xc3\xa9chargement']

  Merci bien pour m'aider .. smile

Hors ligne

#6 Le 26/12/2011, à 14:52

pingouinux

Re : Python encoding list

Bonjour,
Ici, print liste imprime chaque élément de liste sous la forme repr(élément).
Il suffit de définir une fonction (idée trouvée ici):

def print_liste(liste) : print "["+", ".join(liste)+"]"

et de l'utiliser comme ceci :

print_liste(listtest)

Hors ligne

#7 Le 26/12/2011, à 15:34

Ismatus

Re : Python encoding list

Bonjour pingouinux smile
 
   Je viens de tester ta solution , c'est trés bien marché smile .
   Mercii beaucoup pour me répondre , en fait ce n'est pas ça vraiment mùon sousci , j'ai remarqué que ce print de la list ne se fait pas , alors j'ai cru que c'est la source du probleme , je t'explique là le vrai probleme ami :
   Voila ; j'ai fait une petite application de sauvegarde automatique avec une interface graphique en Tkinter , ça marchait trés bien sauf  quand un répértoire est en "é" , je fais mes testes sur "Téléchargement" .
   J'ai deux fichiers codes Python : Tmp2.py ( l'interface graphique : choix des chemins et ecriture de crontab ) , et Backup11.py qui reçoit les arguments de Tmp2.py ( les arguments sont bien une liste des chemins des dossiers selectionnés ) .
   Quand j'execute Tmp2.py je peux choisir mes dossiers à sauvegarder , puis ça ecrit une crontab comme :

# m h  dom mon dow   command
32 13 26 12 * python /home/ismail/Bureau/SaveProg/Backup11.py  /home/ismail/Téléchargements /home/ismail/Téléchargements 

 
  puis à l'heure donnée , le dossiers se crée , contient un fichier zip :"133201.zip" si j'entre je trouve un dossier "T??l??chargement" , mais si je dézippe "133201.zip" avant d'entrer c'est bien .

Hors ligne

#8 Le 26/12/2011, à 16:20

pingouinux

Re : Python encoding list

Apparemment, c'est parce que zip stocke les noms de fichiers en UTF-8, et que ceux-ci ne sont pas bien restitués par unzip -l ou par l'"archive manager". Les noms sont corrects quand on extrait les fichiers.

Hors ligne

#9 Le 26/12/2011, à 17:05

Ismatus

Re : Python encoding list

Oui , tu as raison pingouinux , je dois trouver une solution pour que ça crée les bons nom des répértoires ...
    Mais mon vraie probleme reside en pyinstaller peut etre : en fait j'ai pu créer un fichier executable nommé : Tmp2 ( en double clickant ça execute le fichier Tmp2.py ) , mais quand je choisi un dossier par :

def GetTarget0():
    
    global rep0
    rep0 = tkFileDialog.askdirectory(initialdir="/",title='Choisissez un repertoire')
    if len(rep0) > 0:
       print "vous avez choisi le repertoire source %s" % rep0
       listerep.append(rep0)
    else :
       print " ta tappe annule "

et car dans Tmp2.py ( l'interface ) j'affiche le chemin du dossier choisi par :

lab12 = Label(source1, text=" + %s"%rep0 , bg = "blue", fg = "black" )
       lab12.place( x=25 , y=80)

l'interface n'affiche rien , comme si j'ai rien choisi ... Par contre si j'execute Tmp2.py ( sans passer par l'executable généré par pyinstaller ) , ça affiche bien au label :

+ /home/user/Téléchargement

    Le probleme se pose seulement quand je choisi un dossier que son nom contient des "é" ... sinon le fichier executable execute bien l'application

Hors ligne

#10 Le 26/12/2011, à 18:41

Ismatus

Re : Python encoding list

Bonjour , j'ai desinstaller pyinstaller de python3.1 et je l'ai reconfiguré pour python2.6 , et c'est la meme chose  , quand je choisi un répértoire à sauvegarder qui contient un "é" ça ne passe pas , se blocke .

Hors ligne

#11 Le 09/01/2012, à 11:15

J5012

Re : Python encoding list

salut
j'ai modifie le programme, le probleme se situe avec ta variable de liste et l'instruction print, l'attribut fonctionnel decode ne sert pas ...

#!/usr/bin/env python
#-*- coding:Utf-8 -*-

from Tkinter import *
import Tkinter as tk
import tkFileDialog
import os
#import ttk
import tkMessageBox
#import psycopg2
from PIL import Image, ImageTk
import Image 
import ImageTk 
import os.path

chaine1 = "Bureau"
chaine2 = "Téléchargement"

listtest = []

listtest.append(chaine1)
print listtest[0]
listtest.append(chaine2)
print chaine2
print listtest[1]

#chaine2.decode('UTF-8','strict')
#chaine1.decode('UTF-8','strict')

for x in listtest:
    print x

je suis en python 2.6
voici le resultat de la console :

Bureau
Téléchargement
Téléchargement
Bureau
Téléchargement

Hors ligne