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 :

modifier une ligne au milieu d'un fichier


Sujet :

Python

  1. #1
    Candidat au Club
    Inscrit en
    Novembre 2009
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 2
    Points : 2
    Points
    2
    Par défaut modifier une ligne au milieu d'un fichier
    Bonjour,

    Je cherche un moyen de modifier une ligne qui se trouve au millieu d'un fichier texte.
    J'ai tout d'abord essayer d'ouvrir mon fichier en ecriture pour repérer ma ligne.
    J'ai ensuite ré-ouvert le fichier en 'r+' pour pouvoir atteindre la ligne concernée a l'aide d'un readline() et d'une boucle while.
    Je penssais donc qu'il suffisait de faire un "write" sur la ligne suivante, mais rien ne se passe.
    Je me suis donc un peu renseigner et j'ai aprit que le mode 'r+' ne permetait que d'ecrire au debut du fichier, ou en utilisant la méthode "seek" pour placer le curseur (deplacement caractere par caractere). Cependant je trouve cela un peut fastidieux d'utiliser le "seek".
    Auriez-vous une autre idée???

    merci d'avance

  2. #2
    Membre éprouvé
    Avatar de Antoine_935
    Profil pro
    Développeur web/mobile
    Inscrit en
    Juillet 2006
    Messages
    883
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur web/mobile

    Informations forums :
    Inscription : Juillet 2006
    Messages : 883
    Points : 1 066
    Points
    1 066
    Par défaut
    Tu peux ouvrir directement le fichier en r+.
    Méfie toi... les écritures dans les fichiers ne se font pas par ligne, mais par byte.
    Ca signifie que si la ligne sur laquelle tu écris n'a pas précisément la longueur de la nouvelle ligne, tu risques soit de garder un bout de l'ancienne ligne, soit de dépasser sur la suivante.

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    141
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2008
    Messages : 141
    Points : 184
    Points
    184
    Par défaut
    Salut !

    Ma façon de faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    with open('fichier.txt') as f:
        lines = f.readlines()
     
    newlines = []
     
    for line in lines:
        if toreplace(line):
            newlines.append(replacingline)
        else:
            newlines.append(line)
     
    with open('fichier.txt', mode='w') as f:
        f.writelines(newlines)
    Je le trouve pas optimisé, un peu moche car on réécrit le fichier au lieu de le modifier, mais bon, il marche !

    Sinon, tu peux toujours jeter un oeil au module fileinput qui permet de faire des modifs sur place, mais je n'ai jamais testé.

  4. #4
    Candidat au Club
    Inscrit en
    Novembre 2009
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    Merci beaucoup pour vos réponses. J'avais deja pensé a ta sollution nardo47 mais en effet, elle est peut optimisée. Cependant je pense que c'est la sollution la plus efficace. De plus, dans ce cas la, le probleme dont Antoine_935 parle n'existe plus. Merci encore a vous deux.

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    105
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : Suisse

    Informations forums :
    Inscription : Septembre 2007
    Messages : 105
    Points : 145
    Points
    145
    Par défaut
    Bonjour,

    Une autre solution est d'utiliser un nouveau fichier dans lequel tu écris en continu. De cette manière il n'est pas nécessaire de stocker tout ton fichier en mémoire (très utile pour de gros fichiers).

    A la fin de ton traitement, il suffit d'effacer l'ancien fichier et de renommer le nouveau fichier avec le nom de l'ancien fichier. Ou de copier le nouveau fichier sur l'ancien et d'effacer le fichier temporaire.

    De plus, pendant tout le traitement tu as accès au deux versions, c'est utile pour le "debug".

    Salutations.

  6. #6
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 304
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 304
    Points : 36 804
    Points
    36 804
    Par défaut
    bonsoir
    pensez aussi à mmap
    -W

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

Discussions similaires

  1. Réponses: 20
    Dernier message: 29/10/2014, 11h52
  2. Modifier une ligne dans un fichier txt en java
    Par nihad510 dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 09/10/2007, 22h08
  3. Modifier une ligne d'un fichier texte?
    Par ecarbill dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 14/05/2007, 18h51
  4. Modifier une ligne d'un fichier texte
    Par lauben dans le forum C
    Réponses: 2
    Dernier message: 27/05/2006, 12h45
  5. Modifier une ligne d'un fichier
    Par jula dans le forum Linux
    Réponses: 4
    Dernier message: 08/04/2005, 17h24

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