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 confirmé

    Homme Profil pro
    Inscrit en
    octobre 2008
    Messages
    3 140
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : octobre 2008
    Messages : 3 140
    Points : 4 814
    Points
    4 814

    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
    Modérateur

    Homme Profil pro
    Architecte technique
    Inscrit en
    juin 2008
    Messages
    9 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Industrie

    Informations forums :
    Inscription : juin 2008
    Messages : 9 612
    Points : 15 685
    Points
    15 685

    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 confirmé

    Homme Profil pro
    Inscrit en
    octobre 2008
    Messages
    3 140
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : octobre 2008
    Messages : 3 140
    Points : 4 814
    Points
    4 814

    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 confirmé

    Homme Profil pro
    Inscrit en
    octobre 2008
    Messages
    3 140
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : octobre 2008
    Messages : 3 140
    Points : 4 814
    Points
    4 814

    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"&#17926;&#8198;&#14080;&#12550;&#16646;&#8198;&#16640;&#12550;&#17926;&#13062;&#9990;&#8198;&#16640;&#18950;&#8198;&#17664;&#11270;&#9990;&#17414;&#8198;&#9984;&#17414;&#13062;&#18950;&#9990;&#11526;&#10502;&#8198;&#16640;&#18950;&#8198;&#9984;&#17414;&#11270;&#17926;&#18438;&#10246;&#3078;&#8198;&#17664;&#14086;&#9990;&#17414;&#10246;&#10502;&#8198;&#9984;&#17414;&#11526;&#17158;&#18438;&#17670;&#10502;&#8198;&#10240;&#9990;&#17414;&#13830;&#14854;&#14086;&#8198;&#14592;&#17414;&#18694;&#8198;&#9984;&#17414;&#12550;&#9734;&#18950;&#13062;&#8198;&#9984;&#17414;&#16646;&#12550;&#17926;&#13062;&#18950;&#8198;&#16640;&#12550;&#9990;&#17926;&#13062;&#18438;&#9990;&#8198;&#18176;&#18438;&#17414;&#9990;&#17926;&#12038;&#3078;&#8198;&#11776;&#17414;&#9990;&#17414;&#8198;&#12800;&#18950;&#9990;&#12550;&#10758;&#18182;&#8198;&#9984;&#17414;&#12550;&#13062;&#17670;&#18950;&#10502;&#3078;&#8198;&#17408;&#17670;&#12550;&#9990;&#11270;&#14598;&#10502;&#8198;&#18176;&#12294;&#9990;&#8198;&#9984;&#17414;&#10758;".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
    Profil pro
    Inscrit en
    décembre 2007
    Messages
    3 188
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : décembre 2007
    Messages : 3 188
    Points : 6 157
    Points
    6 157
    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!
    Ne jamais remettre au lendemain ce que quelqu'un d'autre peut faire pour vous le jour même...
    La journée internationale de procrastination prévue initialement aujourd'hui, est repoussée à demain...
    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
    Modérateur

    Homme Profil pro
    Architecte technique
    Inscrit en
    juin 2008
    Messages
    9 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Industrie

    Informations forums :
    Inscription : juin 2008
    Messages : 9 612
    Points : 15 685
    Points
    15 685

    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
    Profil pro
    Inscrit en
    décembre 2007
    Messages
    3 188
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : décembre 2007
    Messages : 3 188
    Points : 6 157
    Points
    6 157
    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).
    Ne jamais remettre au lendemain ce que quelqu'un d'autre peut faire pour vous le jour même...
    La journée internationale de procrastination prévue initialement aujourd'hui, est repoussée à demain...
    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
    Modérateur

    Homme Profil pro
    Architecte technique
    Inscrit en
    juin 2008
    Messages
    9 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Industrie

    Informations forums :
    Inscription : juin 2008
    Messages : 9 612
    Points : 15 685
    Points
    15 685

    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
    Modérateur

    Homme Profil pro
    Architecte technique
    Inscrit en
    juin 2008
    Messages
    9 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Industrie

    Informations forums :
    Inscription : juin 2008
    Messages : 9 612
    Points : 15 685
    Points
    15 685

    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
    Profil pro
    Inscrit en
    décembre 2007
    Messages
    3 188
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : décembre 2007
    Messages : 3 188
    Points : 6 157
    Points
    6 157
    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"
    Ne jamais remettre au lendemain ce que quelqu'un d'autre peut faire pour vous le jour même...
    La journée internationale de procrastination prévue initialement aujourd'hui, est repoussée à demain...
    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
    Modérateur

    Homme Profil pro
    Architecte technique
    Inscrit en
    juin 2008
    Messages
    9 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Industrie

    Informations forums :
    Inscription : juin 2008
    Messages : 9 612
    Points : 15 685
    Points
    15 685

    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
    Profil pro
    Inscrit en
    décembre 2007
    Messages
    3 188
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : décembre 2007
    Messages : 3 188
    Points : 6 157
    Points
    6 157
    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?
    Ne jamais remettre au lendemain ce que quelqu'un d'autre peut faire pour vous le jour même...
    La journée internationale de procrastination prévue initialement aujourd'hui, est repoussée à demain...
    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
    Modérateur

    Homme Profil pro
    Architecte technique
    Inscrit en
    juin 2008
    Messages
    9 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Industrie

    Informations forums :
    Inscription : juin 2008
    Messages : 9 612
    Points : 15 685
    Points
    15 685

    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
    Modérateur

    Homme Profil pro
    Architecte technique
    Inscrit en
    juin 2008
    Messages
    9 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Industrie

    Informations forums :
    Inscription : juin 2008
    Messages : 9 612
    Points : 15 685
    Points
    15 685

    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