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 endroit précis dans un fichier txt


Sujet :

Python

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    53
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juin 2008
    Messages : 53
    Points : 32
    Points
    32
    Par défaut Ecrire à un endroit précis dans un fichier txt
    Bonjour à tous,

    Je cherche à écrire à un endroit précis sur une ligne d'un fichier mais je n'y arrive pas (j'ai cherché dans les tutos et forums mais rien trouvé...).
    En fait, j'écris des lignes avec
    import os
    g= open('c:/suivi.txt', 'w+')
    g.write ('1ere chose a ecrire')
    g.write('2eme chose a ecrire')
    g.close
    os.startfile("c:/suivi.txt")
    et je voudrai écrire à la suite de 'première chose à écrire' la date de création d'un fichier (pour récupérer et formater la date, je sais faire...). Ce que je n'arrive pas à faire, c'est d'écrire sur la première ligne à la position 30 (exple : 'première chose a ecrire_________17/10/2007' - les "_" représentent des espaces - cela me permettra d'aligner toutes les dates indépendamment de la longueur de ce qui est écrit au début de chaque ligne = colonne de date). J'ai essayé avec seek() mais je n'y arrive pas (j'ai cru comprendre que seek permettait de lire à la position qu'on voulait mais pas d'écrire).
    J'espère que je suis clair...
    Merci d'avance si quelqu'un peut m'aider et bonne journée,

    Fred

  2. #2
    Membre extrêmement actif
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 418
    Points : 1 658
    Points
    1 658
    Par défaut
    Impossible d'écarter les bytes d'un fichier écrit sur un disque dur pour y insérer d'autres bytes. Ça parait évident mais je le dis quand même à cause de la façon dont tu fais allusion à seek().

    D'aprés ce que j'ai compris, seek() ne permet pas de LIRE comme tu l'écris, il POSITIONNE simplement un pointeur dans le fichier. Ensuite, si tu veux que le programme lise, tu le fais lire avec readline().
    Si tu veux insérer quelque chose avant la suite du fichier, il faut en fait écrire un nouveau fichier dans lequel tu feras écrire la partie antérieure, puis l'insert, puis la partie postérieure. Et tu effaceras le fichier de départ.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    f = open('fichier','r')
    g = open('fichier avec insert','w')
    Si tu connais la position de la ligne dans laquelle tu veux faire un insert tu mets alors
    Sinon il faut la chercher.



    Ceci étant dit, puisqu'il faut écrire un nouveau fichier, il devient évident pour atteindre ton objectif qu'il te faut d'abord écrire des blancs en nombre suffisant (aprés la ligne telle qu'elle est lue), avant d'écrire la date.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    f = open('fichier','r')
    g = open('fichier avec insert','w')
    f.seek(position)
    rd = f.readline()[0:-1]
    blancs = ( 30 - len(rd) )*' '
    g.write(rd+blancs+'\n')
    g.write(date)
    Mais il y a plus simple que de compter le nombre de blancs nécessaires:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    rd = f.readline()[0:-1]
    g.write(rd+'\t\t\t+'\n')
    g.write(date)
    Chaque \t déclenche une avancée à tabulation suivante.
    [0:-1] c'est pour éliminer le 'retour à la ligne' inapparent en bout de rd


    ATTENTION
    Je n'utilise jamais w+ r+ et a+, je ne sais donc pas trop comment ça marche.
    Mais j'ai testé f = open('fichier', ' w+')
    et ça tronçonne 'fichier' avant d'y faire quoi que ce soit --> mis à 0 bytes.
    C'est pour ça que je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    f = open('fichier','r')
    g = open('fichier avec insert','w')
    mais si quelqu'un a une autre solution pour insérer dans un fichier, je suis preneur.

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    53
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juin 2008
    Messages : 53
    Points : 32
    Points
    32
    Par défaut Merci eyquem
    Salut,

    Tout d'abord, merci eyquem.
    J'avais en effet envisagé de compter le nombre de caractères de "première chose à écrire" puis le soustraire à un nombre de blancs que je souhaite. Mais je trouvai cela trop lourd dans mon code et j'étai sur que python pouvait faire mieux.
    Je ne connaissais pas '\t' et c'est exactement ce qu'il me fallait.
    Je pensai quand même sincèrement qu'on pouvait choisir l'endroit où on écrivait dans un fichier (genre seek mais pour écriture)....
    Merci encore et bonne journée,

    Fred

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

Discussions similaires

  1. Ecrire à un endroit précis dans un fichier
    Par jklms dans le forum Langage
    Réponses: 7
    Dernier message: 28/01/2014, 11h03
  2. Ecrire une plage excel dans un fichier txt
    Par kuma_buzz dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 30/05/2008, 11h48
  3. Enregistrer à l'endroit voulu dans un fichier txt
    Par nams2590 dans le forum VC++ .NET
    Réponses: 2
    Dernier message: 12/12/2007, 13h03
  4. Ecrire à un endroit précis d'un fichier texte
    Par sisco97 dans le forum Langage
    Réponses: 6
    Dernier message: 27/04/2007, 19h44
  5. Ecrire à un endroit précis dans un fichier texte
    Par zemeilleurofgreg dans le forum Delphi
    Réponses: 4
    Dernier message: 26/06/2006, 21h51

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