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 :

reconnaissance chaine de caractère bug en première ligne


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 6
    Par défaut reconnaissance chaine de caractère bug en première ligne
    Bonjour à tous,
    nouvelle en python, je me heurte à un problème... je ne sais pas si c'est vraiment propre à python, mais je ne vois pas où poster ailleurs :/

    je vais essayé d'être la plus explicite possible :

    j'ai un fichier (corpus.txt dans mon code) qui est constitué de ligne texte, où s’intercalent des lignes du type :

    **** *var_1 *var_2

    mon script doit réécrire ces lignes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    for line in open("corpus.txt",'r'):
        if line.startswith("aaaa ") :
            print line
     
        else :
            print "toto"
    je n'ai aucun problème pour les lignes en milieu de doc, mais sur la première ligne, il ne reconnaît pas ma suite de caractère...

    n'arrivant pas à mettre mes fichers en pj, je les ai laissés ici : http://lu.lou.free.fr/photoForum/doc.zip

  2. #2
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 307
    Par défaut
    Salut,

    Chez moi aucun problème.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     
    vincent@tiemoko:~/Téléchargements/doc$ python code.py 
    toto
    aaaa var_o *annee_2012 *mois_jan
     
    toto
    toto
    toto
    toto
    toto
    aaaa var_o *annee_201 *mois_fev
     
    toto
    toto
    toto
    toto
    toto
    aaaa var_o *annee_20 *mois_fev
     
    toto
    toto
    toto
    toto
    Pour poster du code, utilise la balise CODE ( le "#" dans le menu d'outils)

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 6
    Par défaut
    merci beaucoup pour ta réponse si rapide,
    dans le doc que j'ai mis en ligne, je commence par un saut de page, et là effectivement ça fonctionne, mais si je le supprime (et commence donc par ma ligne étoilée) là ça ne la prend plus :/

  4. #4
    Membre chevronné
    Homme Profil pro
    Développeur banc de test
    Inscrit en
    Mai 2014
    Messages
    199
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur banc de test
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2014
    Messages : 199
    Par défaut
    Bonjour,

    C'est un problème d'encodage des caractères.

    Finalement c'est bien que vous ayez mis à disposition le fichier d'origine pour comprendre le problème qu'on ne verrait pas en collant le texte ici.

    Le fichier est en UTF-8 mais avec en plus un BOM. c'est un marqueur de 3 octets en en-tête: (0xEF, 0xBB, 0xBF): "" étant sa signature, indiquant que le contenu est encodé en UTF-8.

    Tous les éditeurs modernes de textes l'exploitent et donc le masque pour interpréter correctement l'ensemble du texte. Le Bloc-notes de Windows le reconnait par exemple.

    Il y a la méthode avec BOM où l'on sait que la suite de caractères encodera en UTF-8. Et la méthode sans BOM où seuls les caractères non ASCII seront encodés sur 2 octets sans marqueur supplémentaire, on ne gagne que 3 octets sur tout le fichier.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for line in open("corpus.txt",'r'):
    	print(line)
    Sous Python 2 comme sur 3, il affichera ceci:

    

    aaaa var_o *annee_2012 *mois_jan
    C'est sournois quand on exploite ce fichier pensant que c'est du texte ASCII simple.

    La méthode à utiliser pour ouvrir le fichier proprement:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    # Python 2
    for line in open("corpus.txt", 'r'):
    	print(line.decode('utf-8'))
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    # Python 3
    for line in open("corpus.txt", 'r', encoding='utf-8'):
    	print(line)

    Pour connaître le type de fichier, Notepad++ par exemple l'indique clairement quand il sait l'identifier et permet de modifier l'encodage mais aussi de le convertir.

    Nom : Notepad++ - UTF-8.png
Affichages : 151
Taille : 923 octets



    Nom : Notepad++ - Encodage.png
Affichages : 150
Taille : 2,4 Ko

Discussions similaires

  1. Ajouter une chaine de caractère dans toutes les lignes d'un fichier
    Par kromei dans le forum Shell et commandes GNU
    Réponses: 5
    Dernier message: 19/03/2013, 13h34
  2. Réponses: 4
    Dernier message: 29/01/2013, 09h44
  3. Réponses: 3
    Dernier message: 05/05/2011, 12h41
  4. Réponses: 4
    Dernier message: 31/08/2010, 17h45
  5. Réponses: 2
    Dernier message: 16/11/2007, 11h33

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