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 :

split et caractères spéciaux


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    2 051
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 2 051
    Par défaut split et caractères spéciaux
    salut les pythoneurs!

    j'édite mon message précédent car j'ai ciblé un peu mieux mes problèmes.

    J'ai un fichier texte "abc.txt" qui contient juste une ligne :
    et je lance ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    #!/usr/bin/python
    # -*- coding: utf8 -*-
    fichier=open("abc.txt","r")
    aaa=fichier.readline()
    bbb=aaa.split()
    fichier.close()
    print "PREMIER RESULTAT"
    print "---"+"\t"+"---"
    print "DEUXIEME RESULTAT"
    print "==="+bbb[1]+"==="
    je m'attendais à avoir le même résultat mais voici ce que j'obtiens:
    Pièce jointe 169201

    comment ça se fait que la tabulation n'est pas pris en compte pour le deuxieme résultat ????
    comment faire pour que ça soit pris en compte ?


    merci

  2. #2
    Expert confirmé

    Avatar de deusyss
    Homme Profil pro
    Expert Python
    Inscrit en
    Mars 2010
    Messages
    1 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Expert Python
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2010
    Messages : 1 659
    Par défaut
    Salut,

    Cela est du à l’interprétation de la string.

    Quand tu lit le fichier abc, le "\t" est interpréter non pas comme "\t" que tu écrit dans ton fichier, à savoir un seul caractère (0x09 de mémoire), mais comme "\" + "t", donc deux caractères ASCII standard, d'ou le fait qu'ils apparaissent en clair.

    Si dans ton fichier, tu écrits "delim" + " " + <saisir une tab> et que tu relance ton programme, cela fonctionnera (précise un split(" ")).

    EDIT:

    Pour la seconde question que j'avais oublié:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    #!/usr/bin/python
    # -*- coding: utf8 -*-
    fichier=open("abc.txt","r")
    aaa=fichier.readline()
    aaa= aaa.replace("\\t", "\t")
    print aaa
    bbb=aaa.split(" ")
    print bbb, len(bbb)
    fichier.close()
    print "PREMIER RESULTAT"
    print "---"+"\t"+"---"
    print "DEUXIEME RESULTAT"
    print "==="+bbb[1]+"==="
    L'astuce est toute bete: échapper le caractère déchappement

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

    Citation Envoyé par membreComplexe12 Voir le message
    comment faire pour que ça soit pris en compte ?
    Pour compléter ce qui a déjà été dit, en Python2, on peut utiliser string_escape (ou unicode_escape):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    >>> s = r'x\tx'
    >>> len(s)
    4
    >>> t = s.decode('string_escape')
    >>> len(t)
    3
    >>>
    mais çà ne fonctionne que pour des "strings" "latin-1" i.e. pas pour décoder de l'unicode genre "\u1234"

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

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    2 051
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 2 051
    Par défaut
    merci beaucoup pour votre aide !!!

    je vais opter pour le bout de code de deusyss car je le trouve facile et il semble fonctionner

    super! merci !

  5. #5
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 738
    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 738
    Par défaut
    Citation Envoyé par membreComplexe12 Voir le message
    je vais opter pour le bout de code de deusyss car je le trouve facile et il semble fonctionner
    C'est vous qui voyez.
    N'oubliez pas que s'il y a des bibliothèques, c'est pour éviter d'avoir à coder une solution spécifique (et ici, partielle) et profiter de sa documentation.

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

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    2 051
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 2 051
    Par défaut
    OK, merci.
    ps: souvent c'est à des fins pédagogiques que je recode des fonctions (pour maitriser python je me fais des petits exercices) ou parfois c'est parce la fonction que j'ai trouvé dans une bibliothèque m'a déplue ou j'ai la flemme de lire une doc trop longue . Bref, je recode souvent des fonctions...

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

Discussions similaires

  1. [WD-2007] Manipulation Chaîne - Split - Caractères spéciaux
    Par jj37fr dans le forum VBA Word
    Réponses: 0
    Dernier message: 16/08/2012, 19h40
  2. Caractères spéciaux et split()
    Par rednight dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 13/11/2009, 12h35
  3. Réponses: 4
    Dernier message: 06/02/2009, 12h10
  4. caractéres spéciaux, fonction split, replace
    Par clochardevobsy dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 22/10/2005, 23h40
  5. Traiter les caractères spéciaux
    Par ricola dans le forum Langage
    Réponses: 2
    Dernier message: 20/02/2003, 09h23

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