Menu

Modifer un fichier texte avec Python [Fermé]

Messages postés
11
Date d'inscription
lundi 7 mai 2018
Statut
Membre
Dernière intervention
23 mai 2018
- - Dernière réponse : dino.adnane
Messages postés
11
Date d'inscription
lundi 7 mai 2018
Statut
Membre
Dernière intervention
23 mai 2018
- 9 mai 2018 à 13:19
Bonjour
J'ai un problème que je n'arrive pas à résoudre malgré mes recherches.

le fichier texte original par exemple est :


Je souhaiterais insérer " $ " chaque 3 lignes dans le fichier pour avoir par exemple:


Personnellement j'ai arrivé a ajouter " $ " mais à chaque ligne avec ce code:







Merci d'avance



Afficher la suite 

2 réponses

Meilleure réponse
Messages postés
5169
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
18 juillet 2019
786
1
Merci
Salut dino.adnane,

Lorsque tu postes du code sur le forum ne poste pas des images, mais copie-colle ton code entre balises de code, permettant de préserver l'indentation de ton code, de colorer la syntaxe et numéroter tes lignes. Si tu n'as pas vu le bouton de l'éditeur te permettant de poster ton code correctement, il est là :


Pour résoudre ton problème, tu peux compter les lignes et utiliser l'opérateur modulo (opérateur
%
: reste de la division entière) sur le compteur pour savoir si c'est un multiple de 3. Si oui, tu écris un $ après avoir écrit ta ligne.

Un peu comme cela :

with open('input.txt') as f:
    for count, line in enumerate(f):
        print(line, end='')
        if (count + 1) % 3 == 0:
            print('$')

Là on compte avec enumerate en même temps que la boucle for :
https://docs.python.org/3/library/functions.html#enumerate
http://book.pythontips.com/en/latest/enumerate.html

mais tu peux aussi juste incrémenter les lignes dans ta boucle.

Dal

Dire « Merci » 1

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 55055 internautes nous ont dit merci ce mois-ci

dino.adnane
Messages postés
11
Date d'inscription
lundi 7 mai 2018
Statut
Membre
Dernière intervention
23 mai 2018
-
Je vous remercie pour votre réponse
Oui avec enumerate j'ai pu trouver la solution mais avec votre code j'ai pas pu le compiler (je pense qu'il y a une erreur dans la ligne 3)
with open('f1.txt') as f1:
    with open('f2.txt', 'w') as f2:
        for ind, line in enumerate(f1, start=1):
            f2.write(line)
            if ind % 3 == 0 :            
                f2.write('$'+'\n')
[Dal]
Messages postés
5169
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
18 juillet 2019
786 -
la ligne 3 du code que j'ai posté (qui s'exécute sans erreurs chez moi) est en Python 3, elle permet de faire un print sans retour à la ligne (le fichier a déjà des retours à la ligne, qui sont à la fin de chaque
line
), le print en ligne 5, lui, ajoutant par défaut le retour à la ligne

si tu as une erreur, c'est peut-être que tu codes en Python 2

cela dit, la ligne 3 a peu d'importance, c'était juste pour illustrer le fonctionnement avec un affichage

content que tu aies pu résoudre ton problème :-)
dino.adnane
Messages postés
11
Date d'inscription
lundi 7 mai 2018
Statut
Membre
Dernière intervention
23 mai 2018
> [Dal]
Messages postés
5169
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
18 juillet 2019
-
Merci infiniment Dal
oui je code en Python 2, donc c'est ça qui a empêché votre code à s'exécuter chez moi
1
Merci
Bonjour.

Cela peut se faire aisément avec la fonction enumerate et l'opérateur modulo (%)
A toi de rechercher comment cela s'utilise, et comment les utiliser dans ton cas.

Dire « Merci » 1

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 55055 internautes nous ont dit merci ce mois-ci

dino.adnane
Messages postés
11
Date d'inscription
lundi 7 mai 2018
Statut
Membre
Dernière intervention
23 mai 2018
-
Merci pour votre réponse