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 :

Probleme encode avec ecriture fichier writelines() [Python 2.X]


Sujet :

Python

  1. #1
    Membre confirmé Avatar de Thierry_V
    Homme Profil pro
    Inscrit en
    Août 2013
    Messages
    153
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations forums :
    Inscription : Août 2013
    Messages : 153
    Par défaut Probleme encode avec ecriture fichier writelines()
    Bonjour

    J'exécute une commande os.system qui créer un fichier txt.
    mais je ne récupère pas le fichier dans un format utf-8 avec les accents
    d'après ce que j'ai compris le codage de windows est en cp850

    Alors qu'avec : f.write(r.encode("utf-8")) fonctionne (dans un autre programme) mais la lecture par ligne ne me conviens pas (pour ce programme) j'ai besoin d'utiliser writelines

    partie du code pour me comprendre, l'erreur est AttributeError: 'list' object has no attribute 'encode'

    cordialement,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    #! /usr/bin/python
    #_*_ coding:utf-8 _*_
    # Python 2.7
     
    os.system('ma commande > monfichier.txt')
        with open('monfichier.txt', 'r') as fichier:
            m=fichier.readlines()
            fichier.close()
     
        entetetxt('monfichier.txt','affiche entête')
        with open('monfichier.txt', 'a') as fichier:
            fichier.writelines(m.encode('utf-8'))   
            fichier.close()

  2. #2
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 049
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 049
    Par défaut
    m est une liste, et n'a donc pas de méthode encode existante,

    à tester

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    fichier.writelines([word.encode('utf-8') for word in m])

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Il y a plusieurs erreurs :

    1. vos en-têtes de script sont erronés : http://legacy.python.org/dev/peps/pep-0263/
    c'est -*- coding: ... -*- et non pas _*_ coding: ... _*_

    2. le gestionnaire de contexte with utilisé avec open() vous dispense justement de recourir à fichier.close()

    3. vous voulez récupérer des chaînes de caractères à réencoder alors que vous récupérez une liste Python de chaînes de caractères correspondant aux lignes du fichier lu

    4 vous rouvrez le fichier en mode 'a' (append) au lieu de 'w' (write), vous êtes sûr que c'est le bon choix ?

    Code exemple :

    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
    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
     
    # Python 2.7
     
    import os
     
    os.system('ma_commande > monfichier.txt')
     
    with open('monfichier.txt') as fichier:
     
        data = fichier.read()
     
    # end with
     
    #~ entetetxt('monfichier.txt','affiche entête') # j'ai pas compris l'intérêt ?
     
    # vous êtes sûr de vouloir ouvrir en mode append ?
    with open('monfichier.txt', 'a') as fichier:
     
        fichier.write(data.encode('utf-8'))
     
    # end with
    Et si vous tenez absolument à gérer une liste de chaînes de caractères correspondant aux lignes du fichier :

    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
    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
     
    # Python 2.7
     
    import os
     
    os.system('ma_commande > monfichier.txt')
     
    with open('monfichier.txt') as fichier:
     
        data = fichier.readlines()
     
    # end with
     
    #~ entetetxt('monfichier.txt','affiche entête') # j'ai pas compris l'intérêt ?
     
    # vous êtes sûr de vouloir ouvrir en mode append ?
    with open('monfichier.txt', 'a') as fichier:
     
        fichier.write("".join(data).encode('utf-8'))
     
    # end with
    @+.

  4. #4
    Membre confirmé Avatar de Thierry_V
    Homme Profil pro
    Inscrit en
    Août 2013
    Messages
    153
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations forums :
    Inscription : Août 2013
    Messages : 153
    Par défaut
    Bonjour,

    La ligne qui me résolu mon souci.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    mon_decodage = i.decode('cp850').encode('latin-1')

  5. #5
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Thierry_V Voir le message
    Bonjour,

    La ligne qui me résolu mon souci.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    mon_decodage = i.decode('cp850').encode('latin-1')
    Avec Python2, pensez aussi à :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
     
    from __future__ import unicode_literals
    en début de fichier, ça évite d'avoir à gérer les problèmes unicode dans le script.

    voir ceci : https://docs.python.org/3/howto/pypo...icode-literals

    voir howto unicode Python2 : https://docs.python.org/2.7/howto/unicode.html

    @+.

  6. #6
    Membre confirmé Avatar de Thierry_V
    Homme Profil pro
    Inscrit en
    Août 2013
    Messages
    153
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations forums :
    Inscription : Août 2013
    Messages : 153
    Par défaut
    Bonsoir

    merci du conseil tarball69

    je vais lire les liens

    a+

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

Discussions similaires

  1. Probleme Link avec en fichier en C
    Par sapin dans le forum Débuter
    Réponses: 3
    Dernier message: 25/03/2009, 17h34
  2. probleme lecture et ecriture fichier texte
    Par shams dans le forum C
    Réponses: 10
    Dernier message: 06/07/2007, 10h46
  3. probleme d'import de fichier txt avec des tab
    Par lecureuil dans le forum Access
    Réponses: 4
    Dernier message: 23/08/2005, 19h22
  4. [VB.NET] Probleme avec les fichiers!!
    Par ludovic85 dans le forum Windows Forms
    Réponses: 2
    Dernier message: 20/01/2005, 17h12
  5. [C#] Probleme de creation de fichier avec Stream
    Par freddyboy dans le forum C#
    Réponses: 7
    Dernier message: 07/06/2004, 11h41

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