[Python] [python] escludere righe vuote o commentate

Andrea D'Amore a a d-amo.re
Ven 3 Feb 2023 14:15:10 CET


On Wed, 1 Feb 2023 at 12:44, Marco Giusti <marco.giusti a posteo.de> wrote:
> for line in open(filename):
>      if line.strip() and not line.startswith("#"):
>          clean.append(line)
>
> print(clean)

> Se questa fosse una risposta in StackOverflow, sono sicuro che qualcuno
> riprenderebbe la soluzione per trasformarla in una linea sola.

Dato che devi chiude il file object difficile restare su una sola istruzione.
Sicuramente la logica "inizializza lista vuota e mettici la roba in
maniera condizionale" la puoi riassumere con una list comprehension,
considerato che la condizione in sé è semplice:

    with open(filename) as file:
        clean = [line.strip() for line in file if line.strip() and not
line.startswith("#")]

Per mia esperienza se la condizione diventa più articolata meglio un
bel blocco for esplicito con gli if:, la list comprehension diventa
rapidamente illeggibile.

Oppure in maniera "più funzionale"

    with open(filename) as file:
        clean = filter(lambda x: x and not x.startswith("#"),
map(lambda x: x.strip(), open(filename)))

La seconda ti dà un generatore, te lo espandi con list() se ti serve
ma in genere meglio ritardare il loro consumo a quando ti serve
effettivamente.


--
A.


Maggiori informazioni sulla lista Python