Précédent   Forum du club des développeurs et IT Pro > Autres langages > Python & Zope > Général Python
Général Python Forum d'entraide sur les fondamentaux du langage Python, syntaxe, POO, bibliothèque standard, ...
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 21/12/2012, 20h27   #21
assoum27
Invité de passage
 
TALN:inférence grammaticale
Inscription : avril 2010
Messages : 16
Détails du profil
Informations professionnelles :
Activité : TALN:inférence grammaticale

Informations forums :
Inscription : avril 2010
Messages : 16
Points : 1
Points : 1
c'est une solution intermédiaire mais elle marche super bien
Merci

Citation:
Envoyé par tyrtamos Voir le message
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:



Je le convertit en fichier utf-16 avec BOM => fichier "destination.txt":

Code :
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 :
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 :
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 :
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?
assoum27 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/12/2012, 20h30   #22
assoum27
Invité de passage
 
TALN:inférence grammaticale
Inscription : avril 2010
Messages : 16
Détails du profil
Informations professionnelles :
Activité : TALN:inférence grammaticale

Informations forums :
Inscription : avril 2010
Messages : 16
Points : 1
Points : 1
c'est une solution intermédiaire mais elle marche super bien
Merci
Citation:
Envoyé par tyrtamos Voir le message
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:



Je le convertit en fichier utf-16 avec BOM => fichier "destination.txt":

Code :
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 :
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 :
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 :
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?
assoum27 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 16h40.


 
 
 
 
Partenaires

Hébergement Web