Suppression de ligne commençant par

Fermé
Aku - 25 févr. 2014 à 11:08
 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

A voir également:

4 réponses

Utilisateur anonyme
25 févr. 2014 à 13:15
Tu aurais un exemple de fichier à traiter à mettre en pièce jointe pour qu'on teste chez nous ?
0
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
0
[Dal] Messages postés 6194 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 11 octobre 2024 1 092
25 févr. 2014 à 16:19
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 pour ton aide Dal, ton script me parait tout à fait fonctionnel, mais bizarrement le fichier de sortie est vide ...
0
[Dal] Messages postés 6194 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 11 octobre 2024 1 092
25 févr. 2014 à 17:06
Chez moi il n'est pas vide.

Essaye de rajouter fichier_out.flush() avant le fichier_out.close().
0
Toujours vide :/ ça me produit un fichier de 0ko peut être que cela vien de ma version de python non ? J'ai python 3.3.3
0
[Dal] Messages postés 6194 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 11 octobre 2024 1 092
Modifié par [Dal] le 25/02/2014 à 18:07
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
0
J'ai essayer et ça ne fonctionne toujours pas :/
0
Qu'est-ce qui ne fonctionne pas? Montre ton code modifié...
0