Suppression de ligne commençant par [Fermé]

- - Dernière réponse :  Aku - 26 févr. 2014 à 08:28
Bonjour,

J'ai quelques difficultés en python
Je cherche a obtenir un programme suppriment des lignes commençant par un espace ou un point d'exclamation puis un espace et garder les lignes commençant par un point d'exclamation et une étoile :
lignes a supprimer : ' ' et '! '
ligne à garder : !*

voici mon programme actuel :

chaine = r"! " #Texte à rechercher
contenu = ""

fichier = open("C:\\Users\\a141726\\Desktop\\TestPython\\LMAM1601464943.txt","r")
for ligne in fichier:
if not(chaine in ligne):
contenu += ligne
fichier.close()

fichier = open('C:\\Users\\a141726\\Desktop\\TestPython\\LMAM1601464943v2.txt', 'w')
fichier.write(contenu)
fichier.close()

le problème et que le fichier que j'obtiens à la fin est totalement déstructure et m'affiche des !?? un peut partout.

Pouvez vous m'aider
merci d'avance

Afficher la suite 

4 réponses

0
Merci
Tu aurais un exemple de fichier à traiter à mettre en pièce jointe pour qu'on teste chez nous ?
0
Merci
Bonjour,
Voici un exemple du fichier que je doit traiter, J'ai fait quelque modification car ce sont des fichier confidentiel, et je ne suis que stagiaire .. Je vous rappel que je veut seulement conserver les lignes commençant par !* ________________________________________________________________________________________________________________
! ! ! ! !
! Cpte annexe Ent Part Dev Pério ! Montant ca EU 2013 ! Montant ca EU 2012 ! Montant ca EU 2011 !
!__________________________________________!_______________________!______________________!______________________!
!!
! ! ! ! !
!* 00012 AAAAAAAAAAAAAA ! 0.000,00 ! 0.000,00 ! 0.000,00 !
! ! ! ! !
!* 00016 AAAAAAAAAAAAAA ! 0,00 ! 0,00 ! 000,00 !
!
! ! ! ! !


J'ai essayer aussi en bash mais ça ne marche pas ...

FINDSTR "!* " C:\Users\a141726\Desktop\TestPython\LMAM1601464943.txt > C:\Users\a141726\Desktop\TestPython\LMAM1601464943v2.txt

ça me copie toutes les lignes dans le nouveau fichier
Messages postés
5253
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
21 octobre 2019
806
0
Merci
Salut Aku,

Un truc comme cela devrait faire l'affaire, je pense :

fichier_in = open("fichier_originel.txt","r")
fichier_out = open("extraction.txt", "w")
for ligne in fichier_in:
    if ligne.startswith("!*"):
        fichier_out.write(ligne)
fichier_in.close()
fichier_out.close()


Dal
0
Merci
Merci pour ton aide Dal, ton script me parait tout à fait fonctionnel, mais bizarrement le fichier de sortie est vide ...
[Dal]
Messages postés
5253
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
21 octobre 2019
806 -
J'utilise Python 2.7.3 sous Cygwin.

C'est bizarre. En principe le flush n'est pas nécessaire si tu fermes bien le fichier.

Cela dit, je ne pratique pas Python depuis très longtemps, et il y a peut-être un truc qui m'échappe.

Tu pourrais essayer ainsi aussi :

fichier_in = open("fichier_originel.txt","r")
with open("extraction.txt", "w") as fichier_out:
    for ligne in fichier_in:
        if ligne.startswith("!*"):
            fichier_out.write(ligne)
fichier_in.close()


ce qui fermera fichier_out même si une exception se produit.

Sinon, tu devrais re-poster ton code entier et voir si quelqu'un de plus expert que moi en Python peut trouver ce qui ne va pas dans ton code.


Dal
J'ai essayer et ça ne fonctionne toujours pas :/
Qu'est-ce qui ne fonctionne pas? Montre ton code modifié...
Le code tourne, mais le fichier final est vide .

fichier_in = open("C:\\Users\\dell-studio-xps\\Desktop\\TestPython\\LMAM1601464943.txt","r")
fichier_out = open('C:\\Users\\dell-studio-xps\\Desktop\\TestPython\\LMAM1601464943v2.txt', 'w')
for ligne in fichier_in:
if ligne.startswith("!*"):
fichier_out.write(ligne)
fichier_in.close()
fichier_out.flush()
fichier_out.close()
Merci Quand même pour votre aide c'est gentil de votre part ^^ j'ai trouvé une autre solution, j'ai utiliser notepad++ pour sélectionner les lignes qui commence par !* puis je les est copier dans un bloc note. Je suis bête de pas avoir penser a cette méthode plus tôt X)