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 :

Ecrire un fichier Ascii et non utf8 [Python 2.X]


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    responsable support
    Inscrit en
    Novembre 2014
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : responsable support

    Informations forums :
    Inscription : Novembre 2014
    Messages : 11
    Par défaut Ecrire un fichier Ascii et non utf8
    Bonjour,

    je me bats depuis ce matin pour écrire un fichier texte en ASCII étendu (c'est à dire avec les accents français sur un octets) et non en utf8.
    Je suis en pyton 2.7 le programme est en encodage utf-8 (en entête : # -*- coding: utf-8 -*-) et je doit écrire un fichier pour un client qui ne peut pas lire de l'utf-8, mais de l'ascii étendu et je n'y arrive pas j'ai essayé encode/decode/unicodedata avec les tables utf-8/iso8859_1/latin_1/cp850 mais soit le programme plante parce qu'il ne peux traiter du str ou que "le xc3 n'est pas dans la table ascii (0-127)" soit les accents sont remplacé par le caractère non accentués

    là je ne vois pas comment faire

    je n'arrive pas à enregistrer un simple mot "Terminé" qui devrait être encodé dans le fichier en hexa : ASCII : "54 65 72 6D 69 6E E9" et non UTF-8 "54 65 72 6D 69 6E C3 A9"

    merci d'avance pour votre aide
    Alain

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

    Citation Envoyé par nazguhl Voir le message
    Je suis en pyton 2.7 le programme est en encodage utf-8 (en entête : # -*- coding: utf-8 -*-) et je doit écrire un fichier pour un client qui ne peut pas lire de l'utf-8, mais de l'ascii étendu
    L'en-tête "coding: utf-8" ne s'applique qu'au script (qui est aussi un fichier texte).
    Pour les fichiers manipulés par ce script là, l'encoding se déclare à l'open(...., encoding='latin-1') - par exemple.

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

  3. #3
    Membre averti
    Homme Profil pro
    responsable support
    Inscrit en
    Novembre 2014
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : responsable support

    Informations forums :
    Inscription : Novembre 2014
    Messages : 11
    Par défaut
    Merci pour la réponse.
    j'ai essayé le open(...,'w','iso-8859-1') mais j'ai une erreur de syntaxe : 'iso-8859-1' : numérique attendu, je pense que l'encoding de l'open ne fonctionne pas en python 2.7, mais en 3.x

    Par contre je crois avoir compris pourquoi je n'y arrivais pas, il y a une différence entre l'affichage d'un print et l'enregistrement dans un fichier :
    par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    txt='Terminé'
    txt1=txt.decode('utf-8').encode('cp850')
    txt2=txt.decode('utf-8').encode('iso-8859-1') 
    print "{0}".format(txt1)
    print "{0}".format(txt2) 
    with open(fic,'w') as ficot:
        ficot.write("{0}\n".format(txt1))
        ficot.write("{0}\n".format(txt2))
    On a à l'affichage :
    Terminé
    TerminÚ
    Et dans le fichier on retrouve par le blocnote un fichier ascii contenant :
    Termin,
    Terminé

    L'encodage ascii en windows diffère de l'encodage ascii dans un fichier et je me suis fait avoir entre les affichages incorrectes dont je cherchais autre chose et lorsque l'affichage était bon, le fichier lui ne l'était pas.

    Donc mon problème est résolu il faut utiliser "txt.decode('utf-8').encode('cp850')" pour des print de contrôle sous windows et "txt.decode('utf-8').encode('iso-8859-1')" pour une écriture dans un fichier ascii.

    Merci à tous.
    Alain

  4. #4
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    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 741
    Par défaut
    Citation Envoyé par nazguhl Voir le message
    j'ai essayé le open(...,'w','iso-8859-1') mais j'ai une erreur de syntaxe : 'iso-8859-1' : numérique attendu, je pense que l'encoding de l'open ne fonctionne pas en python 2.7, mais en 3.x
    Ah oui désolé, python2 çà commence à faire et j'avais oublié qu'il fallait récupérer l'open des modules io ou codecs.

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

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

Discussions similaires

  1. importer un fichier ASCII non délimité
    Par soniah dans le forum MATLAB
    Réponses: 1
    Dernier message: 30/10/2008, 10h53
  2. Impossible d'ecrire dans un fichier ASCII ..
    Par kedare dans le forum Qt
    Réponses: 0
    Dernier message: 16/09/2007, 18h19
  3. Lecture de fichier - dernière ligne non prise en compte
    Par JulienPles dans le forum Algorithmes et structures de données
    Réponses: 3
    Dernier message: 16/03/2005, 11h57
  4. lire un fichier ascii complexe
    Par alexum dans le forum C++
    Réponses: 9
    Dernier message: 16/02/2005, 09h05
  5. Import fichier ASCII dans une base
    Par pithier dans le forum Bases de données
    Réponses: 3
    Dernier message: 01/02/2005, 19h03

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