[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