Il 30/04/20 14:11, Marco Beri ha scritto:
On Thu, Apr 30, 2020 at 2:07 PM Paolo Miniussi <miniussipa...@gmail.com <mailto:miniussipa...@gmail.com>> wrote:

    Buongiorno
    molto piacere Paolo. Sono iscritto alla list di Python e ho visto
    che in questi giorni state trattando l'argomento relativo al
    conteggio delle parole.
    Ho un problema specifico relativo all'estrazione di alcune
    stringhe che seguono altre stringhe.
    In pratica ho un testo tipo questo:
    lunghezza legno: 1000 cm
    peso del tronco: 34 kg
    tempo di lavorazione: 11 ore 57 minuti

    Praticamente devo estrarre ciò che viene dopo le singole
    definizioni. Quindi per la prima riga devo prelevare la stringa
    "1000 cm" , per la seconda "34 kg" e via così (poi dovrò
    eventualmente capire se prendere solo il valore numero oppure
    tutta la stringa).
    Ho approcciato il problema usando lo slice e quindi tagliando le
    porzioni di stringa desiderate per poi successivamente
    trasformarle in variabili.
    Il problema è che il mio file di log che contiene queste
    informazioni da estrarre può ovviamente variare di lunghezza e
    quindi lo slice va a farsi benedire.
    Per spiegarmi, il valore della "lunghezza legno:" invece di essere
    1000 cm può diventare 123000 cm quindi il taglio in slice mi
    troncherebbe il dato.
    Stavo cercando di cambiare approccio e quindi di prelevare i dati
    prendendo tutto quello che viene dopo una data stringa e prima di
    quella successiva.
    Avete qualche suggerimento?


La soluzione per te sono le regular expression:


    >>> testo = """lunghezza legno: 1000 cm
    ... peso del tronco: 34 kg
    ... tempo di lavorazione: 11 ore 57 minuti"""
    >>> testo
    'lunghezza legno: 1000 cm\npeso del tronco: 34 kg\ntempo di
    lavorazione: 11 ore 57 minuti'
    >>> import re
    >>> re.findall(r"\s(\d+)\b\s*(\w+)", testo)
    [('1000', 'cm'), ('34', 'kg'), ('11', 'ore'), ('57', 'minuti')]



Potrei consigliarti un buon testo sulle regex ma sarei in conflitto di interessi (e poi trovi comunque una marea di tutorial su web) :-D

Ciao.
Marco.


Elegante come soluzione però incorretta perché il "tempo di lavorazione" viene spezzato in "11 ore" e "57 min". Forse uno split() sulla singola riga è più indicato.

ciao

--
Alessandro T.

R: Perché leggiamo dall'alto al basso e da sinistra a destra.
D: Perché dovrei iniziare la risposta all'e-mail dopo il testo citato?

_______________________________________________
Python mailing list
Python@lists.python.it
https://lists.python.it/mailman/listinfo/python

Rispondere a