Création d'une boucle qui sépare en fichiers à la rencontré du mot chapitre

Résolu/Fermé
Eole_7726 Messages postés 3 Date d'inscription mardi 18 mai 2021 Statut Membre Dernière intervention 19 mai 2021 - Modifié le 18 mai 2021 à 17:28
mamiemando Messages postés 33079 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 23 avril 2024 - 19 mai 2021 à 17:07
Bonjour à tous,

Je souhaiterais faire une boucle qui créé un nouveau fichier quand elle rencontre les mots 'chapitre' et 'épilogue'. Cela me ferait en tout 136 chapitres nommés chapitre_1.txt [...] épilogue. txt
J'ai essayé la boucle

for i in ligne:
       if  'CHAPTER' :
            print('chapitre_. txt') 
       elif 'Epilogue' 
              print('épilogue. txt') 


mais le terminal me donne le texte entier et 135 lignes chapitre_. txt sans pour autant me créer de nouveaux fichiers et l'épilogue n'apparaît pas. Je suis perdue. Est-ce que quelqu'un pourrait m'aider s'il vous plaît ?
Merci d'avance pour vos réponses

Configuration: Android / Chrome 90.0.4430.91

3 réponses

mamiemando Messages postés 33079 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 23 avril 2024 7 749
Modifié le 18 mai 2021 à 17:45
Bonjour,

Il y a plusieurs choses qui ne vont pas :
  • La syntaxe est incorrecte (par exemple il manque
    :
    à la fin de la ligne
    elif
    .
  • La variable
    i
    (qui contient ta ligne courante) n'est pas exploitée. Je pense en plus que vu le nommage de la variable, tu t'es mélangée les pinceaux.
  • Je t'invite aussi à soigner l'indentation, car c'est important en python (ça permet de savoir à python où commencent et s'arrêtent les différents blocs).


Du coup je pense que ton code ressemble plutôt à quelque chose de ce genre :

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

filename_in = "mon_fichier.txt"
with open(filename_in, "r") as f_in:
    index = 0
    for line in f_in.readlines():
        words = set(line.lower().strip().split())
        create_file = True
        if "chapter" in words:
            index += 1
            filename_out = f"chapitre_{index}.txt"
        elif "epilogue" in words:
            filename_out = f"epilogue.txt"
        else:
            create_file = False
           
        if create_file:
            with open(filename_out, "w") as f_out:
                print(line, "-->", filename_out)


Exemple :

Si
mon_fichier.txt
contient :
chapter 1
ligne1
ligne2
ligne3
chapter1

chapter 2
ligne4
ligne5
ligne6
ligne7
ligne8

CHAPTER 3
ligne9
ligne10
ligne11
ligne12
ligne13

epilogue
toto
tata
titi

... on obtient :

chapter 1
--> chapitre_1.txt
chapter 2
--> chapitre_2.txt
CHAPTER 3
--> chapitre_3.txt
epilogue
--> epilogue.txt


Bonne chance
0
Eole_7726 Messages postés 3 Date d'inscription mardi 18 mai 2021 Statut Membre Dernière intervention 19 mai 2021
18 mai 2021 à 19:25
Merci beaucoup pour votre réponse !

Lorsque que je tape de nouveau mon script avec des améliorations (la partie que j'ai envoyé dans mon premier message n'est qu'un bout du chaos géant de mon code), le terminal ne m'affiche rien d'autre que (program exited with code: 0). Pourtant j'ai bien pensé à remplacer "mon_fichier.txt" par le nom de mon fichier, le fichier lui-même n'a pas subi de modifications et j'ai un peu de mal à comprendre le problème. Cela pourrait-il venir du fait que je travaille sur Geany ?

En vous remerciant pour votre aide et en vous souhaitant une bonne soirée.
0
mamiemando Messages postés 33079 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 23 avril 2024 7 749
19 mai 2021 à 16:27
Bonjour,

L'éditeur texte que tu utilises n'a aucun impact sur le comportement du programme : indépendamment de ses fonctionnalités, il écrit un fichier texte qui est lu par ton interpréteur python. Pour te répondre, il faudrait qu'on puisse reproduire ton problème (et donc d'avoir ton code, les paramètres d'exécutions, les fichiers traités, etc.) Idéalement il faudrait un code minimal qui met en évidence le problème et élimine tout ce qui ne concerne pas directement ton problème.

Par ailleurs, arrives-tu au moins à lancer avec succès (dans un fichier à part) le code que je t'ai partagé ?

Bonne chance
0
Eole_7726 Messages postés 3 Date d'inscription mardi 18 mai 2021 Statut Membre Dernière intervention 19 mai 2021
19 mai 2021 à 16:53
Bonjour,


Merci beaucoup pour votre message, je me suis rendue compte après avoir l'envoie que c'était stupide de penser qu'il y avait un quelconque rapport avec mon éditeur

Au début je n'arrivais pas à lancer ne serait-ce que le code que vous m'aviez envoyé. Mais après avoir travaillé dessus toute la nuit, je me suis rendue compte que c'était un problème de chemin d'accès en allant chercher dans le AppData de mon ordinateur. Quand j'ai changé l'appellation du fichier, le code s'est lancé normalement et m'a donné le résultat escompté.
En vous remerciant encore pour votre aide.
je vous souhaite une excellente fin de journée.
0
mamiemando Messages postés 33079 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 23 avril 2024 7 749
19 mai 2021 à 17:07
Merci pour ton retour, et bonne continuation :-)
0