[Python] (senza oggetto)

Alessandro T. tagliare3 a yahoo.it
Gio 30 Apr 2020 15:15:16 CEST


Il 30/04/20 14:11, Marco Beri ha scritto:
> On Thu, Apr 30, 2020 at 2:07 PM Paolo Miniussi 
> <miniussipaolo a gmail.com <mailto:miniussipaolo a 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?



Maggiori informazioni sulla lista Python