1
votes

Comment imprimer toutes les lignes d'un fichier sauf c'est-à-dire commentées avec ("#") en python

Comment imprimer toutes les lignes d'un fichier sauf ie commentées avec ("#") en python?

Exemple de données:

with open('file.txt','r') as f:
    b=[line.strip().split() for line in f if not line.startswith(('#'))]

Ma tentative: p >

World is suffering from the penidemic due to corona. 
#Stay safe #stay home
focus on boosting immunity#stay fit
Pray for all the corona warriors.

La sortie du code contient 'immunity # safe'

Je veux ignorer le texte commenté. Je ne sais pas comment continuer.Veuillez aider, merci


5 commentaires

Votre code vérifie uniquement si une ligne commence par un # , mais il semble également qu'une ligne contienne un # à mi-chemin pour tout éliminer au-delà de ce point - non?


... donc, comme quelques points de départ à utiliser vous-même: vous pouvez utiliser split ('#') pour diviser une ligne en morceaux, puis ne prendre que le premier morceau (donc, split ('#') [0] ). Ou vous pouvez utiliser une expression régulière, avec re.sub () ou similaire.


BTW, pourquoi utilisez-vous strip () sans arguments? Est-ce vraiment la bonne chose de supprimer les espaces blancs de début et de fin? (Je ne vois rien dans vos exigences déclarées qui appelle à le faire).


... de même, je ne sais pas pourquoi split () est la bonne chose non plus.


@charles Duffy merci beaucoup monsieur


3 Réponses :


0
votes

Essayez peut-être d'utiliser une expression régulière comme #. * Cela correspondra à tout sauf à une nouvelle ligne après un caractère #.


0 commentaires

1
votes

Vous pouvez utiliser str.split () avec le paramètre maxsplit = 1 .

Par exemple:

['World is suffering from the penidemic due to corona.', 'focus on boosting immunity', 'Pray for all the corona warriors.']

Impressions:

data = []
with open('file.txt', 'r') as f_in:
    for line in f_in:
        line = line.split('#', maxsplit=1)[0].strip()
        if line:
            data.append(line)

print(data)


1 commentaires

Merci beaucoup monsieur:)



0
votes

J'utiliserais Regex pour cela, l'expression r "(#. *?) \ n" sélectionne les commentaires et fonctionne correctement sur regex101.com Python Flavor, Regex v43 , mais je ne sais pas comment cela se traduit en Python, donc ce n'est malheureusement pas très utile. Cela fonctionne en regroupant tout, du caractère # à une nouvelle ligne


0 commentaires