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 à un index de ligne précis


Sujet :

Python

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mars 2015
    Messages : 50
    Points : 25
    Points
    25
    Par défaut Ecrire dans un fichier à un index de ligne précis
    Bonjour,

    j'aimerais ajouter une ligne de texte à mon fichier à un endroit précis
    En fait, j'aimerais écrire en dessous de la ligne contenant le mot "MeetMe("
    Mon problème est que si j'ouvre mon fichier avec open('fichier', 'ab') il écrit la ligne en toute fin de fichier
    et si j'ouvre le fichier avec open('fichier', 'wb') il supprime tout le contenu du fichier.

    je pensais pouvoir le faire avec la méthode seek mais cela ne fonctionne pas

    voici mon code (il écrit "SALUTSALUT" en fin de fichier)..
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    file2 = open(dossierCS +'/extensions.conf')
    for line3 in file2.readlines():
        if line3.find("MeetMe(") != -1:
            with open (f2, 'ab') as _file:
                _file.seek(25, 1)
                print("salut")
                _file.write(b"SALUTSALUT")
                _file.close()
            break
    Quelqu’un peut me donner une piste?
    Merci bcp.

  2. #2
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 823
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 823
    Points : 7 119
    Points
    7 119
    Par défaut
    Le principe est de ressortir le contenu du fichier dans une liste python, puis d'insérer ta ligne dans cette liste à l'index voulu.

    Une fois cela fait, on ouvre son fichier au format w et on réécrit le contenu dans le fichier à l'aide d'une boucle...
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  3. #3
    Membre chevronné
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2013
    Messages
    1 608
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 608
    Points : 2 072
    Points
    2 072
    Par défaut
    Citation Envoyé par fred1599 Voir le message
    Le principe est de ressortir le contenu du fichier dans une liste python, puis d'insérer ta ligne dans cette liste à l'index voulu.

    Une fois cela fait, on ouvre son fichier au format w et on réécrit le contenu dans le fichier à l'aide d'une boucle...
    Ou pourquoi pas ainsi ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    f = open('fichier_source', 'rw').read().replace("MeetMe(","MeetMe( \n"
    f1 = open('fichier_cible','w')
    f1.write(f)
    Je n'ai pas essayé, je précise...
    Pas d'aide par mp.

  4. #4
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 823
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 823
    Points : 7 119
    Points
    7 119
    Par défaut
    Un problème sera sans doute rencontré si on a plusieurs fois le terme MeetMe dans le texte.
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  5. #5
    Membre chevronné
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2013
    Messages
    1 608
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 608
    Points : 2 072
    Points
    2 072
    Par défaut
    Je ne vois pas trop pourquoi mais comme j'ai autre chose sur le gaz...
    Pas d'aide par mp.

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mars 2015
    Messages : 50
    Points : 25
    Points
    25
    Par défaut
    Merci, merci.

    ça fonctionne tès bien, marco056.

    J'essaye aussi avec une liste, fred1599, mais quand je veux réécrire cette liste dans un fichier, une erreur dit que ce que j'écris dans le fichier doit être un str et pas list. et si je met str(content) ou str(element), il écrit les \n au lieu de faire un retour à la ligne etc..

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    maliste = []
    with open(file, 'r') as f:
        content = f.readlines()
        print(content)
        maliste.append(content)
     
    maliste.insert(pos+1, "exten => 6504,1,MeetMe(4) ")
     
    f = open(file,'w')
    for element in maliste:
        f.write(element)
    J'ai essayé d'ouvrir le fichier avec 'rt' et 'wt' et avec 'rb' et 'wb' mais j'arrive au même résultat.
    As-tu une piste pour déboguer cela?
    Merci

  7. #7
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 823
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 823
    Points : 7 119
    Points
    7 119
    Par défaut
    Je ne vois pas trop pourquoi
    On va remplacer toutes les occurrences de ce pattern dans le fichier, je ne suis pas sûr que se soit ce qu'il voulait

    ça fonctionne tès bien, marco056.
    Certes, si on rencontre une seule fois ce pattern, c'est fonctionnel !

    -------------------------

    Pour ma proposition, ton problème est la création de maliste, pourquoi là créer ?

    content est une liste !
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  8. #8
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mars 2015
    Messages : 50
    Points : 25
    Points
    25
    Par défaut
    Désolé, je n'avais pas vu vos réponses avant de poster mon dernier message ..

    En fait il y a plusieurs occurrences de ce pattern et je ne désire pas tous les remplacer.

    Avec le code de marco056, j'avais fait une boucle pour trouver le nombre d'occurence du pattern dans le fichier.
    Et comme dans ce fichier le MeetMe est suivi d'un numéro (MeetMe(1) puis MeetMe(2) etc..) je pouvais écrire .replace(MeetMe(nbre d’occurrence) , .... )

    Et maintenant, avec la liste content c'est parfait !
    Merci beaucoup.

  9. #9
    Membre chevronné
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2013
    Messages
    1 608
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 608
    Points : 2 072
    Points
    2 072
    Par défaut
    Citation Envoyé par fred1599 Voir le message
    Un problème sera sans doute rencontré si on a plusieurs fois le terme MeetMe dans le texte.
    J'avais effectivement compris qu'il fallait tous les remplacer...
    Pas d'aide par mp.

Discussions similaires

  1. Ecrire dans un fichier en sautant des lignes
    Par quefets dans le forum Langage
    Réponses: 4
    Dernier message: 20/11/2008, 15h28
  2. Ecrire un CLOB dans un fichier sans fin de ligne
    Par tedparker dans le forum SQL
    Réponses: 3
    Dernier message: 20/07/2007, 10h05
  3. Réponses: 7
    Dernier message: 16/07/2007, 17h23
  4. Réponses: 2
    Dernier message: 06/06/2007, 16h27
  5. ecrire dans un fichier un retour a la ligne
    Par ETI-trian dans le forum C++
    Réponses: 8
    Dernier message: 17/10/2005, 09h51

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