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 :

Problème avec .write


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    70
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 70
    Par défaut Problème avec .write
    Bonjour,

    Voilà mon problème :
    J'ai plusieurs fichiers binaires à concaténer. Il ya une entete sur chaque fichier qu'il faut enlever. Je vous met mon code et je vous explique ensuite:
    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    # -*- coding: iso-8859-1 -*-
    import os, os.path
     
    repertoire = 'D:\Documents and Settings\olivetr\My Documents'
    rep = repertoire
     
    entrees = os.listdir(rep)
    fichier_concatene = 'D:\Documents and Settings\olivetr\My Documents\blabla.tm'
    fconcat = file(fichier_concatene, 'wa')
    lignes = []
    total = []
    #Pour tous les fichiers dans le repertoire
    for nf in entrees:
        nfc = os.path.join(rep, nf)
        if os.path.isfile(nfc) and nf[0:7] == "R_HKTMR":
            f = file(nfc, 'rb')
            ligne = f.readlines()
            Premiereligne = ligne[0]
            Premiereligne = Premiereligne.replace(Premiereligne[0:39], "")
            lignes = [Premiereligne]
            for line in ligne[1:len(ligne)]:
                lignes.append(line)
            for line1 in lignes:
                total.append(line1)
     
    for lines in total:
        fconcat.write(lines)
    fconcat.close()
    fconcat = file(fichier_concatene, 'rb')
    filez = fconcat.readlines()
    filez1 = filez[0]
    total1 = total[0]
    print len(filez1)
    print len(total1)
    Docn voila, je fais une boucle en enlevant les 39 premiers caracteres de mes fichiers et puis je recupère tout ça dans une liste total.
    Ensuite pour chaque objet dans total, je l'écrit dans mon fichier fconcat.
    Le probleme est que fconcat.write me rajoute un caractere de fin de ligne à la fin de chaque ligne.
    En effet :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    >>> print len(filez1)
    433
    >>> print len(total1)
    432
    Malheureusement, même si se sont des caracteres de fin de ligne, ce sont des caracteres quand meme et du coup dans mon editeur hexadecimal quand je lit mon fichier à la fin de chaque ligne j'ai un caractere en trop "0x0D".
    Il y aurait-il une solution à mon problème afin de supprimer ce caractere et ne pas avoir 0x0D qui se rajoute à la fin de chaque ligne?

    Si vous pouviez m'aider ce serait bien bien cool !
    Tequilaplouf

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    70
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 70
    Par défaut
    Je pense avoir isolé mon prblème...
    Le 0x0D que je vois sous l'editeur hexa est en fait un \r
    Je ne sais pas si c'est le .write qui retourne un \r\n en fin de ligne ou autre chose mais apparement c'est ici le problème !

    Gnarf need help

    Tequilapaf

  3. #3
    Membre chevronné
    Homme Profil pro
    Responsable du parc et des réseaux de télécommunication
    Inscrit en
    Mai 2003
    Messages
    290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Responsable du parc et des réseaux de télécommunication
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2003
    Messages : 290
    Par défaut
    Bonjour,
    Essaie ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    file(fichier_concatene, 'ab+')
    Je ne connais pas le mode "wa".

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    70
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 70
    Par défaut
    Le mode 'wa' permet de créer le fichier, si il n'existe pas, à l'emplacement définit. Et si il existe déjà il va écraser les données au relancement du script.
    Le 'ab+', toi, va ajouter à la suite du fichier déjà existant ce qui est problématique !

    Mais peut-etre un 'wab+'....

    Teq

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    70
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 70
    Par défaut
    BINGO ! Le 'wab+' fonctionne... mais bon ça ne résoud pas mon problème !
    Le b signifie que je vais écrire en binaire dedans c'est ça?

    Bref, apparement, c'est le readline qui repère une fin de ligne en '\r\n'.
    Ce serait pour pouvoir s'adapter a tous les os (pour certains os la fin de ligne est \r et pour d'autres c'est \n).
    Quand on lit un fichier .txt normalement, le \r n'est pas problématique mais quand on le lit en binaire, les caractères sont présents !

    Maintenant, moi je dois me contenter du \n donc virer le \r....
    A ce que je comprend mais je me trompe peut-etre...

    Comment faire... La est tout le problème !

    Teq

    EDIT :
    Me suis planté... Le .write écrit quand il repère un retour à la ligne '\r\n'...
    Parceque les lignes dans la liste "total" ne contiennent que '\n' et on repère un caractere supplémentaire lorsque on lit mon fichier concaténé...

    GRRRR je ne sais pas d'ou il vient a part de là !

  6. #6
    Membre confirmé

    Profil pro
    Inscrit en
    Février 2003
    Messages
    95
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : Etats-Unis

    Informations forums :
    Inscription : Février 2003
    Messages : 95
    Par défaut
    Bonjour,

    Je ne vois pas l'intérêt du mode wa (écrasement et ajout en même temp )
    Pour écraser le fichier à chaque ouverture, le mode w suffit.

    Pour éviter l'ajout de caractères de fin de ligne parasites, essaie wb.

    Mathieu

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    70
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 70
    Par défaut
    Merci Mathieu !
    Sujet résolu, ça marche nickel !
    Va falloir que je fouille un peu plus sur l enet pour trouver les différents modes pour la fonction file...

    Merci beaucoup à tous les 2 !

    Tequilapaf

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

Discussions similaires

  1. Problème avec Response.write et <!DOCTYPE .. >
    Par Gunny dans le forum ASP.NET
    Réponses: 2
    Dernier message: 22/07/2008, 15h41
  2. [PHP-JS] problème avec mon document.write
    Par kevinf dans le forum Langage
    Réponses: 18
    Dernier message: 06/10/2006, 06h27
  3. problème avec ofstream::write
    Par b4u dans le forum SL & STL
    Réponses: 3
    Dernier message: 01/06/2006, 14h17
  4. Problème avec document.write()
    Par d.w.d dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 19/01/2006, 12h06

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