Bonjour,

Pour continuer mon apprentissage Python, j'ai répondu à cet exercice:
Chercher dans tous les fichiers d'un dossier donné ceux qui contiennent des lignes commençant par un mot donné et écrire dans un fichier rapport la liste des fichiers répondant au critère.
Le rapport sera présenté de la façon suivante :

Date :
Dossier :

fichier1
ligne du fichier1 commençant par le mot cherché
ligne suivante du fichier1 commençant par le mot cherché
...
dernière ligne du fichier1 commençant par le mot cherché

fichier2
ligne du fichier2 commençant par le mot cherché
ligne suivante du fichier2 commençant par le mot cherché
...
dernière ligne du fichier2 commençant par le mot cherché

etc...


Voilà le programme:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
#!/usr/bin/env python
# -*- coding: utf-8 -*-
 
# Date : 25 Novembre 2016
# Programme : TRAITEMENT DE FICHIERS DANS UN DOSSIER
# Enoncé : Ecrire un programme qui génère un rapport des fichiers qui commencent par le mot saisie par l'utilisateur
 
# imports
import os
import time
 
# Début du programme
print("=== TRAITEMENT DE FICHIERS DANS UN DOSSIER ===\n\n")
 
# L'utilisateur saisi le chemin du dossier qui contient les fichiers
CheminDossier = str(input("Entrer le chemin du dossier à traiter: "))
 
# L'utilisateur saisi le nom du rapport
NomFichierRapport = str(input("Choisir le nom du fichier rapport: "))
 
# ListeDesFichiers contient le nom.extension des fichiers
ListeDesFichiers = os.listdir(CheminDossier)
 
# L'utilisateur saisi le mot à chercher
MotCle = str(input("Entrer le mot: "))
print("")
 
# Creation fichier rapport
CheminCompletRapport = (CheminDossier+os.sep+NomFichierRapport+".txt")
Rapport=open(CheminCompletRapport,'w')
 
Rapport.write("Date: ") # On écrit la date du jour
Rapport.write(time.strftime('%d/%m/%y %H:%M',time.localtime()))
Rapport.write("\n")
Rapport.write("Dossier: ") # On écrit le Chemin du dossier concerné
Rapport.write(CheminDossier)
Rapport.write("\n\n")
 
# Pour chaque fichier dans la liste
for fichier in ListeDesFichiers:
        CheminCompletFichier = (CheminDossier+os.sep+fichier) # Chemin du fichier
        # Si c'est un fichier
        if os.path.isfile(CheminCompletFichier):
                Lignes = open(CheminCompletFichier, 'r') # On ouvre en lecture le fichier
                Rapport.write("Fichier: ")
                Rapport.write(fichier)
                Rapport.write("\n")
 
                # Pour chaque ligne du fichier
                for L in Lignes:
                        # Si la ligne commence par le Mot défini par l'utilisateur
                        if L.startswith(MotCle):
                                # On écrit la ligne et le fichier concerné dans le rapport
 
                                Rapport.write(L)
                Lignes.close()
                Rapport.write("\n")
Rapport.close()
 
# Affichage du fichier Rapport
Rapport=open(CheminCompletRapport,'r')
ContenuRapport = Rapport.read()
print(ContenuRapport)
Rapport.close()
Le programme fonctionne mais je ne trouve pas de solution pour supprimer l'écriture dans le rapport des fichiers qui ne contiennent pas le mot "toto" par exemple.

Si je les rajoutes dans la boucle for, je vais avoir le nom du fichier écrit plusieurs fois...
Si je les met en dehors de la boucle (comme actuellement), j'ai tous les fichiers qui sont écrit dans le rapport, même ceux qui ne contiennent pas le mot...


Avez-vous une piste pour corriger ce problème ?

Merci d'avance !!