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 dans un fichier a une ligne spécifié ?


Sujet :

Python

  1. #1
    Membre du Club Avatar de stuffy
    Étudiant
    Inscrit en
    Juin 2008
    Messages
    70
    Détails du profil
    Informations personnelles :
    Âge : 30

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2008
    Messages : 70
    Points : 49
    Points
    49
    Par défaut Ecrire dans un fichier a une ligne spécifié ?
    Je voudrais savoir comment avec tkinter on peut ecrire dan un fichier a une ligne spécifier

    ex :

    fichier.txt

    Ligne 1 : bonjour petit oiseau.
    Ligne 2 : coment va tu.
    Ligne 3 :
    Ligne 4 : je vais te faire cuire

    code :

    ecrire "bouhou" ligne 3

  2. #2
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    941
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 941
    Points : 1 384
    Points
    1 384
    Par défaut
    Ce n'est pas lié à tkinter. Il n'y a pas moyen d'insérer des données dans un fichier; tu devras recopier le fichier en ajoutant les données.
    Fais une recherche dans ce forum; il y a d'autres threads qui parlent de cela.

  3. #3
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Points : 5 360
    Points
    5 360
    Par défaut
    Une possibilité:

    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
    #!/usr/bin/env python
    #-*- coding: utf-8 -*-
     
    from __future__ import with_statement
    import os
     
    def file_insert(filename, lines, position):
        with open(filename, 'r') as f_in:
            with open('tmp.txt', 'w') as f_out:
                for i, fline in enumerate(f_in):
                    if i == position:
                        for line in lines:
                            f_out.write("%s\n" % line)
                    f_out.write(fline)
        os.rename(filename, filename + '.backup')
        os.rename('tmp.txt', filename)
     
    if __name__ == '__main__':
        file_insert('test.txt', ['Nouvelle ligne'], 5)
    ou, si tu n'a pas la possibilité de créer un fichier temporaire:

    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
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    #!/usr/bin/env python
    #-*- coding: utf-8 -*-
     
    from __future__ import with_statement
    import os
     
     
    def file_insert(filename, lines, position):
        with open(filename, 'r+') as f:
            # On compte le nombre de lignes
            nlines = 0
            for line in f:
                nlines += 1
            if position > nlines:
                position = nlines
     
            f.seek(0, os.SEEK_END)
            read_pos = f.tell()
     
            # On met le fichier a la bonne taille
            size_to_move = 0
            for line in lines:
                print >> f, line
                size_to_move += len(line) + 1
     
            # On revient au debut pour chercher le point
            # d'insertion
            write_pos = f.tell()
            f.seek(0, os.SEEK_SET)
     
            for i in xrange(position):
                f.readline()
     
            insertion_pos = f.tell()
     
            # On deplace les donnees vers la fin
            while (read_pos - size_to_move) > insertion_pos:
                read_pos -= size_to_move
                write_pos -= size_to_move
                f.seek(read_pos, os.SEEK_SET)
                buf = f.read(size_to_move)
                f.seek(write_pos, os.SEEK_SET)
                f.write(buf)
     
            write_pos = insertion_pos + (write_pos - read_pos)
            f.seek(insertion_pos, os.SEEK_SET);
            buf = f.read(read_pos - insertion_pos)
            f.seek(write_pos, os.SEEK_SET)
            f.write(buf)
     
            # Ecriture des lignes dans le fichier
            f.seek(insertion_pos, os.SEEK_SET)
     
            for line in lines:
                print >> f, line
     
     
    if __name__ == '__main__':
        file_insert('test.txt', ['Nouvelle ligne'], 0)
    Thierry

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

Discussions similaires

  1. Réponses: 11
    Dernier message: 09/12/2010, 11h32
  2. [Débutant] Ecrire dans un fichier Excel en lignes
    Par pompier21 dans le forum Interfaces Graphiques
    Réponses: 5
    Dernier message: 09/01/2009, 10h59
  3. Réponses: 3
    Dernier message: 10/10/2007, 09h15
  4. Ecrire dans un fichier ou une bdd
    Par HaTnuX dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 10/01/2007, 14h02
  5. Écrire dans un fichier à une place précise
    Par alliance dans le forum Langage
    Réponses: 15
    Dernier message: 26/08/2006, 23h08

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