Bonjour à tous,

Tout d'abord je découvre Python, ainsi que la programmation en général.

Pour les besoins de mon travail, j'ai besoin, à partir d'un fichier 'initial.txt', de récuperer une partie des données de ce fichier en le modifiant suivant qqls règles pour en faire un fichier 'final.txt':

1. Ce fichier est en .txt et est construit sous forme de lignes.
2. Le fichier final devra garder la meme structure sauf que je veux
pouvoir faire un tri sur chaque ligne en fonction d'une liste de mots
3. Si un des mots de la liste apparait dans la ligne, je supprime cette ligne
autrement, je garde cette ligne et je passe à la suivante en faisant cette
meme opération.
4. A partir du moment ou un des mots de cette liste se trouve dans une ligne,
on la supprime.

Voila mon ptit bout de code qui marche à peu près bien, sauf qu'il y a un ptit
binz (normal, sinon je vous demenderai pas un coup d'main )

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
def filtre(source,destination):  #Nom de la fonction
    "recopier un fichier en éliminant les lignes de remarques"
    initial= open("C:\\TRANSFERT\\initial.txt", 'r')  #Ouverture du fichier initial
    final = open("C:\\TRANSFERT\\final.txt", 'w')  #Ouverture du fichier final
    filtre = ['Destinataire','NC','bl','Edité','i','Ce','on','lt','is','Poids'] #liste de tri
    while 1:
        txt = initial.readline() #Lecture ligne par ligne
        if txt =='':
             break     #Test de fin de fichier 
         for i in filtre:  #Boucle defilement de la liste de tri
             if txt.find (i)== -1:  #Test presence d'un des mots de la liste de tri
                 final.write(txt)   #On ecrit la ligne dans le nouveau fichier
 
    initial.close()  #Fermeture
    final.close()   #Fermeture
    return
 
filtre(initial.txt', 'final.txt')  #Execution de la fonction.
Mon petit soucis, je voudrais faire le test de presence de l'ensemble des mots qu'une seule fois par ligne et non pas un test pour chacun des mots de la liste (la boucle 'for i in filtre')

En effet, le resultant me renvoie pour chaque ligne analysée, la copie de cette ligne autant de fois que la liste des mots a été parcourue (moins une fois si l'un des mots de la liste etait present)

Ou alors peut etre en arretant la boucle dès qu'un des mots a été trouvé.

Si quelqu'un voit une solution à mon petit problème, je suis preneur.
Ou bien meme une autre facon de faire, plus j'en verrai, mieux se sera

Merci.