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 :

please Help: utilisation de utf-16 sous python?


Sujet :

Python

  1. #1
    Futur Membre du Club
    TALN:inférence grammaticale
    Inscrit en
    Avril 2010
    Messages
    16
    Détails du profil
    Informations professionnelles :
    Activité : TALN:inférence grammaticale

    Informations forums :
    Inscription : Avril 2010
    Messages : 16
    Points : 7
    Points
    7
    Par défaut please Help: utilisation de utf-16 sous python?
    Bonjour,

    actuelement j'esseye d'implémter un prog qui lit le contenu d'une page html et copie le contenu sur un fichier TXT.

    j'ai réussi a l'implémenté avec codage et encodage UTF-8,

    le résultat (le contenu des fichier text) seront analysé par un autre logiciel .

    selement voilà ce logiciel n'accepte que les fichier codé en utf-16.

    j'ai utilisé le même programme que j'ai développé pour utf-8 en remplaçant .encode('utf8') et .decode ('utf8') par utf-16.(voir ci dessous)

    mais lors de l'exécution il m'a généré des erreurs et n'a pas pu s'exécuter,

    #C:/python27
    # -*- coding: utf-16 -*-

    def lire_ecrire_fichier_txt(url, name_file):

    print "décut de l'éxécution"
    htmlSource = urllib.urlopen(url).read().decode('utf-16')

    text=htmlSource.lower().split('<p')[1:]
    path = createFile(name_file)
    f = open(path, "a")
    title=htmlSource.lower().split('<title>')[1:]
    for i in title:

    if (i[:i.find('</title>')]!=-1):
    txt= i[:i.find('</title>')]
    text=enlever_balise(txt)
    text=netoyer_text(text)
    if text!= '':
    f.write((text+'\n').encode('utf-16'))
    for chunk in htmlSource.lower().split('<p')[1:]:
    if(chunk.find('</p>')!=-1):

    if chunk[0] != '<':
    text= chunk[:chunk.find('</p>')]+"\n"
    txt= chunk[:chunk.find('</p>')]+"\n"
    text=enlever_balise(txt)
    text=netoyer_text(text)


    if text!= '':
    f.write((text+'\n').encode('utf-16'))

    f.close()
    nb_token(path)

  2. #2
    Expert éminent

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    Salut,

    Quelles erreurs ? Il serait bien de montrer le traceback.

    Une remarque: ton script ne doit pas être obligatoirement en utf-16 pour ce que tu veux faire, l'encodage de ton script et celui de tes données n'ont rien à voir ensemble.

    Exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    # -*- coding: utf-8 -*-
     
    TEXT = u"Noël au balcon, Pâques au tison"
     
    with open('proverbe.txt', 'w') as objf:
        objf.write(TEXT.encode('utf-16'))
     
    with open('proverbe.txt', 'r') as objf:
        txt = objf.read().decode('utf-16')
     
    print txt
    vincent@tiemoko:~/Bureau$ python utf16.py
    Noël au balcon, Pâques au tison
    D'autre part, le parsing de ton html m'a l'air encombré de choses inutiles, tes erreurs viennent peut-être de là.

  3. #3
    Futur Membre du Club
    TALN:inférence grammaticale
    Inscrit en
    Avril 2010
    Messages
    16
    Détails du profil
    Informations professionnelles :
    Activité : TALN:inférence grammaticale

    Informations forums :
    Inscription : Avril 2010
    Messages : 16
    Points : 7
    Points
    7
    Par défaut
    Merci pour ta réponse mais lorsque j'ai tenté de lire à partir de la page HTML en utf-16 avec la commande
    htmlSource = urllib.urlopen(url).read().decode('utf-16')

    un message d'erreur est apparu




    Traceback (most recent call last):
    File "<pyshell#2>", line 1, in <module>
    lancer()
    File "C:\Users\ESSMA\Desktop\getlien_khabar.py", line 328, in lancer
    base = get_Html("http://www.elkhabar.com/ar/")
    File "C:\Users\ESSMA\Desktop\getlien_khabar.py", line 216, in get_Html
    htmlSource = urllib.urlopen(url).read().decode('utf-16')
    File "C:\Python27\lib\encodings\utf_16.py", line 16, in decode
    return codecs.utf_16_decode(input, errors, True)
    UnicodeDecodeError: 'utf16' codec can't decode bytes in position 262-263: illegal UTF-16 surrogate

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    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 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Merci pour ta réponse mais lorsque j'ai tenté de lire à partir de la page HTML en utf-16 avec la commande
    htmlSource = urllib.urlopen(url).read().decode('utf-16')
    Pourquoi essayer de décoder en "utf-16" une page HTML dans laquelle on trouve "<meta content="text/html; charset=utf-8" http-equiv="Content-Type">"?
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    Futur Membre du Club
    TALN:inférence grammaticale
    Inscrit en
    Avril 2010
    Messages
    16
    Détails du profil
    Informations professionnelles :
    Activité : TALN:inférence grammaticale

    Informations forums :
    Inscription : Avril 2010
    Messages : 16
    Points : 7
    Points
    7
    Par défaut
    pour répondre a ta qst :

    je veux construire une base de données de texte arabe

    j'ai extrait le contenu d'une page HTML avec decode(utf-8)
    et j'ai copié le text sur un fichier TXT avec un encode (utf-8)

    j'ai implémenté ceci avec succès

    mais la phase d'après, le logiciel avec le quel je veux utilisé ces fichier doivent etre txt codé en UTF-16 et utilise l'AnSi ce lodicizl est déja pret

    alors comment puis je refaire la meme chose en utf -16

    Merci

  6. #6
    Expert éminent

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    Si tu l'as déjà fait avec succès, alors il suffit de refaire exactement la même chose en changeant uniquement la dernière étape. C'est-à-dire en enregistrant en utf-16.

    Que le document original soit en utf-8 ne t'empêche pas de l'enregistrer dans un autre encodage.

  7. #7
    Futur Membre du Club
    TALN:inférence grammaticale
    Inscrit en
    Avril 2010
    Messages
    16
    Détails du profil
    Informations professionnelles :
    Activité : TALN:inférence grammaticale

    Informations forums :
    Inscription : Avril 2010
    Messages : 16
    Points : 7
    Points
    7
    Par défaut
    j'ai refai cette étape:

    je lit en utf-8 apartir de la page web
    et j'enregistre en utf-16

    aucune erreur n'est survenu dans mon programme

    mais dans mon fichier en sortie , j'ai mon text plus une séquence de caractères spéciaux ,
    ex: 䘆 㜀ㄆ䄆 䄀ㄆ䘆㌆✆ 䄀䨆 䔀Ⰶ✆䐆 ✀䐆㌆䨆✆ⴆ⤆ 䄀䨆 ✀䐆Ⰶ䘆䠆⠆ఆ 䔀㜆✆䐆⠆⤆ ✀䐆ⴆ䌆䠆䔆⤆ ⠀✆䐆㘆㨆㜆 㤀䐆䤆 ✀䐆ㄆ☆䨆㌆ ✀䐆䄆ㄆ䘆㌆䨆 䄀ㄆ✆䘆㌆䠆✆ 䜀䠆䐆✆䘆⼆ఆ ⸀䐆✆䐆 ㈀䨆✆ㄆ⨆䜆 ✀䐆ㄆ㌆䔆䨆⤆ఆ 䐀䔆ㄆ✆Ⰶ㤆⤆ 䜀〆✆ ✀䐆⨆㔆

  8. #8
    Expert éminent

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    Ben oui mais je suppose que cela dépend du support d'affichage.

    Un terminal ? un bloc-notes ?

    Moi si je reprend exactement ton texte de cette manière:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    TEXT = r"䘆 㜀ㄆ䄆 䄀ㄆ䘆㌆✆ 䄀䨆 䔀Ⰶ✆䐆 ✀䐆㌆䨆✆ⴆ⤆ 䄀䨆 ✀䐆Ⰶ䘆䠆⠆ఆ 䔀㜆✆䐆⠆⤆ ✀䐆ⴆ䌆䠆䔆⤆ ⠀✆䐆㘆㨆㜆 㤀䐆䤆 ✀䐆ㄆ☆䨆㌆ ✀䐆䄆ㄆ䘆㌆䨆 䄀ㄆ✆䘆㌆䠆✆ 䜀䠆䐆✆䘆⼆ఆ ⸀䐆✆䐆 ㈀䨆✆ㄆ⨆䜆 ✀䐆ㄆ㌆䔆䨆⤆ఆ 䐀䔆ㄆ✆Ⰶ㤆⤆ 䜀〆✆ ✀䐆⨆".decode('utf-16')
    print TEXT
    j'obtiens des kanjis, pas des caractères arabes:
    飤蚀鳣蚄蓤蚀蓤蚄飤蚌鳢蚀蓤蚨胢肔냢蚜郤蚀鳢蚐賣蚨鳢蚴ꓢ蚀蓤蚨胢肜郤蚰飤蚠ꃢ蚰胢肔鳣蚜郤蚠ꓢ蚀鳢蚐듢蚌ꃤ蚔ꓢ蚀ꃢ蚜郤蚘꣣蚜胢肤郤蚤胢肜郤蚄飢蚨賣蚀鳢蚐蓤蚄飤蚌꣤蚀蓤蚄鳢蚘賣蚠鳢蚀鳤蚠郤蚜飤蚼냠蚀룢蚐鳢蚐胢肈꣤蚜蓣蚨鳤蚀鳢蚐蓣蚌铤蚨ꓢ蚰胢肐铤蚄鳢蚰ꓣ蚤胢肜胣蚜胢肜郤蚨
    ... etc
    Le transfert par le forum y serait-il pour quelque chose ?

    Èventuellement, donnes le lien de la page web d'où provient le texte.

  9. #9
    Futur Membre du Club
    TALN:inférence grammaticale
    Inscrit en
    Avril 2010
    Messages
    16
    Détails du profil
    Informations professionnelles :
    Activité : TALN:inférence grammaticale

    Informations forums :
    Inscription : Avril 2010
    Messages : 16
    Points : 7
    Points
    7
    Par défaut
    je connais la source du problèmce qui me génère ces caractères spéciaux mais je ne sais comment le résoudre ,
    o faite : j'ouvre un ficchier en append , j'ecrie mon texte + un saut de ligne , mais c'est cet saut de ligne en question qui me génère des prb
    j'ai esseyai de l'ecrire de plusieur facon mais sans succès

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     objf.write((text+u'\n').encode('utf-16'))
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     objf.write((text+'\n').encode('utf-16'))
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    objf.write((text+unicode('\n','utf-8')).encode('utf-16'))
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    objf.write((text).encode('utf-16'))
                        objf.write(('\n').encode('utf-16'))
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    text=text+'\n'
    objf.write((text).encode('utf-16'))
    mais lorsuqe j'utilise objf.write((text).encode('utf-16')) seulement ca marche mais j'ai besoin de ces saut de lignes dans mon text

    Que puis je faire ??!

  10. #10
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 461
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 461
    Points : 9 248
    Points
    9 248
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    A mon avis, il faut utiliser le module codecs dans ce genre de cas.

    Le principe:

    1 on lit un fichier en donnant l'encodage source: il est lu et chargé en mémoire en unicode.

    2- on peut faire le traitement qu'on veut en mémoire puisque c'est de l'unicode.

    3- on écrit le fichier en donnant l'encodage destination

    Si on veut seulement convertir un fichier 'utf-8' en 'utf-16', cela donnerait quelque chose comme:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    import codecs
     
    with codecs.open(fichiersource, 'r', 'utf-8') as fs:
        with codes.open(fichierdestination, 'w', 'utf-16') as fd:
            fd.write(fs.readline())
    J'ai fait ça de mémoire: essaie!
    Un expert est une personne qui a fait toutes les erreurs qui peuvent être faites, dans un domaine étroit... (Niels Bohr)
    Mes recettes python: http://www.jpvweb.com

  11. #11
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    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 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Salut,

    Chaque appel a str.encode('utf-16') place le BOM fffe en tête du buffer.
    C'est ce BOM qui fout la grouille lorsqu'on écrit le fichier avec plusieurs .encode à la suite.

    La suggestion de Tyrtamos est une bonne idée.
    Mais après quelques tests, je n'arrive pas à la faire fonctionner: les appends ajoutent toujours le BOM avant d'écrire la suite.

    Et, je n'ai pas le temps de regarder plus.
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  12. #12
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 461
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 461
    Points : 9 248
    Points
    9 248
    Billets dans le blog
    6
    Par défaut
    @wiztricks

    J'ai déjà utilisé 'utf-8-sig' au lieu de 'utf-8' pour neutraliser le BOM du début de fichier (cf doc du module codecs).
    Un expert est une personne qui a fait toutes les erreurs qui peuvent être faites, dans un domaine étroit... (Niels Bohr)
    Mes recettes python: http://www.jpvweb.com

  13. #13
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    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 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Citation Envoyé par tyrtamos Voir le message
    J'ai déjà utilisé 'utf-8-sig' au lieu de 'utf-8' pour neutraliser le BOM du début de fichier (cf doc du module codecs).
    Désolé, mais je ne vois pas en quoi cela aide dans le cas utf-16.
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  14. #14
    Futur Membre du Club
    TALN:inférence grammaticale
    Inscrit en
    Avril 2010
    Messages
    16
    Détails du profil
    Informations professionnelles :
    Activité : TALN:inférence grammaticale

    Informations forums :
    Inscription : Avril 2010
    Messages : 16
    Points : 7
    Points
    7
    Par défaut
    navré de vous dire que rien ne marche
    il y'aurait pas une fonction équivalent a wirteln() qui ajoute automatiquement un saut de ligne a la fin du fichier
    merci

  15. #15
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    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 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Citation Envoyé par assoum27 Voir le message
    navré de vous dire que rien ne marche
    il y'aurait pas une fonction équivalent a wirteln() qui ajoute automatiquement un saut de ligne a la fin du fichier
    Je ne vois pas comment s'en sortir autrement que:
    - ré-écrire le fichier complètement et faire des ajouts après,
    - s/classer codec pour détecter le premier write et bazarder le BOM
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  16. #16
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 461
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 461
    Points : 9 248
    Points
    9 248
    Billets dans le blog
    6
    Par défaut
    J'avais mal compris, je pensais qu'on ne pouvait pas lire l'utf-8 avec le BOM. Et je viens de constater que l'écriture en utf-16 place son BOM "FF FE".

    Il suffit dans ce cas de le recopier en binaire, en "oubliant" ses 2 premiers octets:

    Ce qui fait, à la suite de mon code précédent:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    with open(fichierdestination, 'rb') as fs:
        with open(fichierdestination2, 'wb') as fd:
            fs.seek(2)
            fd.write(fs.read())
    A défaut d'une solution plus élégante!

    PS: dans mon code précédent, il y a une petite coquille: "codecs" et non "codes"
    Un expert est une personne qui a fait toutes les erreurs qui peuvent être faites, dans un domaine étroit... (Niels Bohr)
    Mes recettes python: http://www.jpvweb.com

  17. #17
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    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 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Citation Envoyé par tyrtamos Voir le message
    J'avais mal compris, je pensais qu'on ne pouvait pas lire l'utf-8 avec le BOM. Et je viens de constater que l'écriture en utf-16 place son BOM "FF FE".

    Il suffit dans ce cas de le recopier en binaire, en "oubliant" ses 2 premiers octets:
    Là encore, je ne vois pas en quoi çà aide: codecs utf-16 sait bien gérer le BOM en début de fichier.

    Le soucis est lorsqu'on fait des appends à un fichier existant: çà ajoute le BOM lors du premier write. Il sera en plein milieu du fichier.
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  18. #18
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 461
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 461
    Points : 9 248
    Points
    9 248
    Billets dans le blog
    6
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Le soucis est lorsqu'on fait des appends à un fichier existant: çà ajoute le BOM lors du premier write. Il sera en plein milieu du fichier
    Mais si, je vais finir par comprendre...


    A défaut d'autre chose, j'exploiterais la solution que je viens de donner:

    1- enregistrer le contenu qu'on veut ajouter, dans un fichier temporaire en texte utf-16,

    2- et le recopier sous forme binaire à la fin de l'autre, en oubliant son BOM avec seek.

    Je viens d'essayer: ça marche. Voilà ce que j'ai fait:

    J'ai un fichier "source.txt" encodé en utf-8, et qui contient:

    abcéèçàùôï
    abcéèçàùôï
    abcéèçàùôï
    Je le convertit en fichier utf-16 avec BOM => fichier "destination.txt":

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    import codecs
     
    with codecs.open("source.txt", 'r', 'utf-8') as fs:
        with codecs.open("destination.txt", 'w', 'utf-16') as fd:
            for ligne in fs:
                fd.write(ligne)
    Maintenant, je fait la même chose avec comme fichier destination un fichier temporaire "temp.txt", toujours texte en utf-16 avec BOM:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    with codecs.open("source.txt", 'r', 'utf-8') as fs:
        with codecs.open("temp.txt", 'w', 'utf-16') as fd:
            for ligne in fs:
                fd.write(ligne)
    Et maintenant, je vais transporter le fichier temporaire "temp.txt" en mode binaire (sans son BOM) à la fin du 1er fichier "destination.txt":

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    with open("temp.txt", 'rb') as fs:
        with open("destination.txt", 'ab') as fd:
            fs.seek(2)
            fd.write(fs.read())
    Et voilà! Si j'essaie de lire le fichier destination.txt, il contient bien 2 fois le fichier source avec l'encodage utf-16:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    with codecs.open("destination.txt", 'r', 'utf-16') as fd:
        for ligne in fd:
            print ligne.rstrip()
    abcéèçàùôï
    abcéèçàùôï
    abcéèçàùôï
    abcéèçàùôï
    abcéèçàùôï
    abcéèçàùôï
    J'ai bon?
    Un expert est une personne qui a fait toutes les erreurs qui peuvent être faites, dans un domaine étroit... (Niels Bohr)
    Mes recettes python: http://www.jpvweb.com

  19. #19
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    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 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Salut,
    Après quelques recherches, ce problème est connu.
    Il est corrigé dans le module io mais pas dans codecs (pour les versions 2.7 et +).

    reproducteur.

    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
    24
    import os
     
    name = 'test.txt'
    def test_append(m):
        if os.path.exists(name):
            os.remove(name)
     
        f = m.open(name, 'w', encoding='utf-16')
        f.write(u'blabla')
        f.write(u'\n')
        f.close()
     
        f = m.open('test.txt', 'a', encoding='utf-16')
        f.write(u'\n')
        f.write(u'blabla')
        f.close()
     
        f = m.open('test.txt', 'r', encoding='utf-16')
        b = f.read()
        return u'\ufeff' not in b
     
    import io, codecs
    assert test_append(io) is True
    assert test_append(codecs) is False
    Pour le PO: vérifier que le reproducteur "fonctionne" chez vous.
    Si c'est le cas, oubliez codecs et passez par io.
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  20. #20
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    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 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Citation Envoyé par tyrtamos Voir le message
    J'ai bon?
    Cà le fait.
    - 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.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. interroger DBpedia en utilisant sparql sous python
    Par phpines dans le forum Général Python
    Réponses: 1
    Dernier message: 24/06/2013, 15h31
  2. utilisation de PATH sous python
    Par saimyas dans le forum Général Python
    Réponses: 4
    Dernier message: 14/06/2011, 16h08
  3. Réponses: 0
    Dernier message: 14/10/2010, 14h47
  4. utiliser xor sous python
    Par nina08 dans le forum Général Python
    Réponses: 6
    Dernier message: 04/08/2008, 15h30
  5. doc sur l'utilisation de bases de données SQL sous python
    Par moon93 dans le forum Général Python
    Réponses: 2
    Dernier message: 03/08/2007, 15h09

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