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 :

Ecriture dans un fichier (bis)


Sujet :

Python

  1. #1
    Membre averti
    Inscrit en
    Juin 2005
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 25
    Par défaut Ecriture dans un fichier (bis)
    Salut,

    J'ai un fichier qui contient par exemple ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    ligne1
    ligne2
     
    123
    12345
    1234
     
    ligne8
    ligne9
    que j'aimerais transformer en :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    ligne1
    ligne2
     
    12345
    1234567
    123
     
    ligne8
    ligne9
    En fait il s'agit en gros de remplacer des nombres au milieu d'un fichier. Le problème c'est que si les nombres qui remplacent les anciens sont plus longs, ça débordent sur le reste (dans le cas où j'ecris par dessus ce qu'il y a).

    Comment faire ?

    Merci

  2. #2
    Membre averti
    Inscrit en
    Décembre 2005
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 30
    Par défaut
    Il sera pas plus facile de faire le traitement depuis un tableau ?

    En gros tu fait un tableau qui stocke chaque ligne de ton fichiers:
    file = open('tonfichier.ext', 'r')
    tab = file.readlines()
    file.close()

    tu fais ton traitement et soit tu réécris par dessus le fichier, soit t'en créé un temporaire, tu delete apres le fichier de base et tu deplace le temporaire.

    Voila idée a creuser...

  3. #3
    Membre averti
    Inscrit en
    Juin 2005
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 25
    Par défaut
    Merci de ta réponse,

    C'est une bonne idée mais le truc aussi c'est que les parties à modifier sont assez petites comparées à la taille du fichier. C'est pour ça que je voulais éviter de lire tout le fichier. Cependant je vois pas d'autre solution, je pense que je vais faire comme tu l'as proposé.

    Sinon, il existe une fonction qui écrit tout le tableau (la liste) dans un fichier ou faut-il faire une boucle ?

    Merci.

    EDIT: Je peux éviter de lire le début du fichier (partie 'ligne1 ligne2') avant la partie que je souhaite modifier mais je suis obligé de lire et réécrire la fin du fichier.

    Si quelqu'un voit un autre moyen ...

  4. #4
    Membre averti
    Inscrit en
    Décembre 2005
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 30
    Par défaut
    Soit tu fais une boucle et tu fais file.readline(), ce qui te retourne une chaine soit tu fais comme je t'ai dit : file.readlines() qui te retourne une list donc le tableau quoi

    Alors pour enlever les 2 premieres lignes, bah soit tu fais la boucle et if not i == 0 or i == 1 : l.append(lfile.readline()), ou tu fais readlines, et tu vire les 2 premiers elements de la list.

  5. #5
    Membre averti
    Inscrit en
    Juin 2005
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 25
    Par défaut
    Je crois que tu n'as pas bien compris mon problème ...

    Le fichier que j'ai mis est un exemple.
    Les parties 'ligne1 ligne2' et 'ligne8 ligne9' sont en vrai très grandes.

    Je souhaitais réécrire par dessus ce qu'il y a au milieu pour éviter de stocker inutilement ces parties (qui ne sont pas modifiées) (et oui je cherche toujours à optimiser ... ).

    Mais quand je modifie, apparament je ne peux que écrire par dessus caractère par caractère donc si la ligne qui remplace l'ancienne est plus longue, elle empiète sur la suivante et ainsi de suite, ce qui finit par empiéter sur la partie 'ligne8 ligne9'.

    Bon sinon je vais suivre ton idée en stockant le fichier, modifier ligne par ligne les lignes que je souhaite modifier et réécrire le fichier à partir du début des modifications (en utilisant fichier.seek()).

    Voilà, je vois pas d'autre moyen.

    Merci de ton aide !

Discussions similaires

  1. probleme d'ecriture dans un fichier texte
    Par azrael88370 dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 24/01/2005, 17h33
  2. Script shell - écriture dans un fichier
    Par Leishmaniose dans le forum Linux
    Réponses: 6
    Dernier message: 13/12/2004, 22h48
  3. Probleme d'ecriture dans un fichier en mode Text
    Par bbozet dans le forum C++Builder
    Réponses: 3
    Dernier message: 14/01/2004, 13h46
  4. [LG]ecriture dans un fichier binaire
    Par jsaviola dans le forum Langage
    Réponses: 3
    Dernier message: 26/12/2003, 17h30
  5. Réponses: 2
    Dernier message: 26/09/2003, 14h51

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