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