Re: [Python] modo furbo per trovare pattern differenti in una stringa

2024-02-13 Thread Alessandro T.

On 13/02/24 14:32, Perini Matteo wrote:

Ciao a tutti,
è da un po' che non scrivo.
Vi chiedo aiuto perchè sto cercando di leggere delle coordinate da un file 
Gcode.
[...]
Vorrei anche attribuire un nome al gruppo identificato in modo da usarlo come 
dizionario.


Ciao,
se ho capito bene qualcosa così dovrebbe andare:

import re

origin =""";LAYER:1
;MESH:untitled.stl
G0 F7200 X1298 Y1798 Z4
;TYPE:WALL-OUTER
G1 F1800 X702 Y1798 E1494.81223
G1 X702 Y1202 E2242.21834
G92 E0
G1 X1298 Y1202 E747.40611
G1 Y1798 X1298 E1494.81223
;TIME_ELAPSED:177.752007
;CHANGE;
;LAYER:2
;MESH:untitled.stl
G0 F7200 X1298 Y1798 Z6
;TYPE:WALL-OUTER
G1 F1800 X702 Y1798 E2242.21834
G92 E0
G1 X702 Y1202 E747.40611"""


pattern = re.compile(r"([EFXYZ])(\d+\.?\d*)")

for linea in origin.splitlines():
    if not linea.startswith(';'):
    print(dict(pattern.findall(linea)))



--
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


Re: [Python] Digest di Python, Volume 171, Numero 10

2020-05-13 Thread Alessandro T.

Il 13/05/20 16:46, Paolo Miniussi ha scritto:

Dunque
stavo riguardando l'espressione proposta da Pietro e direi che l'uso 
del ? non è contemplabile poiché non ci sono parti facoltative.

Stand by
PM



Ciao,
l'uso del ?, in questo caso, non indica parte facoltativa. Se dai uno 
sguardo a

https://docs.python.org/3/library/re.html
troverai la spiegazione di (?<=...) e (?=...)


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


Re: [Python] Dove sbaglio?

2020-04-30 Thread Alessandro T.

Il 30/04/20 19:53, Marco Beri ha scritto:

[...]

La funzione zip fa questo:

>>> list(zip([1,2,3], ['a', 'b', 'c']))
[(1, 'a'), (2, 'b'), (3, 'c')]


Passandogli un parametro con l'* in pratica gli facciamo fare il 
contrario:


>>> list(zip(*[(1, 'a'), (2, 'b'), (3, 'c')]))
[(1, 2, 3), ('a', 'b', 'c')]


Ma nel tuo caso lei fa il suo dovere, dobbiamo invece modificare il 
comportamento della funzione sorted:


>>> ritardo_numeri_singoli_ordine_decrescente ,
numeri_singoli_in_ordine = zip(*sorted(zip(ritardo_numeri_singoli,
riepilogo_numeri_singoli), key=lambda x:(x[0],-x[1]), reverse=True))
>>> ritardo_numeri_singoli_ordine_decrescente
(55, 55, 53, 53, 52, 50, 49, 47, 45, 44, 41, 40, 39, 38, 34, 33,
32, 30, 29, 26, 25, 22, 22, 21, 20, 18, 13, 12, 11, 7, 6, 5, 4, 3,
2, 1, 0)
>>> numeri_singoli_in_ordine
(10, 36, 12, 32, 14, 26, 13, 11, 30, 21, 17, 24, 27, 15, 3, 23,
33, 8, 18, 22, 35, 0, 9, 29, 4, 2, 25, 16, 20, 5, 34, 19, 28, 31,
6, 7, 1)


In pratica diciamo alla funzione sorted di usare per l'ordinamento 
inverso il primo numero così com'è (il ritardo) e il secondo numero al 
contrario.
In alternativa potevamo dirgli di non fare l'ordine inverso e 
invertire il primo, il risultato non cambia:


>>> ritardo_numeri_singoli_ordine_decrescente ,
numeri_singoli_in_ordine = zip(*sorted(zip(ritardo_numeri_singoli,
riepilogo_numeri_singoli), key=lambda x:(-x[0],x[1])))
>>> ritardo_numeri_singoli_ordine_decrescente
(55, 55, 53, 53, 52, 50, 49, 47, 45, 44, 41, 40, 39, 38, 34, 33,
32, 30, 29, 26, 25, 22, 22, 21, 20, 18, 13, 12, 11, 7, 6, 5, 4, 3,
2, 1, 0)
>>> numeri_singoli_in_ordine
(10, 36, 12, 32, 14, 26, 13, 11, 30, 21, 17, 24, 27, 15, 3, 23,
33, 8, 18, 22, 35, 0, 9, 29, 4, 2, 25, 16, 20, 5, 34, 19, 28, 31,
6, 7, 1)


Ok, confesso che è un po' complicato (le funzioni lambda sono un 
pochino avanzate), però anche quello che vuoi fare tu lo è.


Ciao.
Marco.




Ovviamente questa soluzione+spiegazione di Marco è preferibile, però 
dai, c'eri quasi:




numeri = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 
18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36]


ritardo = [22, 0, 18, 34, 20, 7, 2, 1, 30, 22, 55, 47, 53, 49, 52, 38, 
12, 41, 29, 5, 11, 44, 26, 33, 40, 13, 50, 39, 4, 21, 45, 3, 53, 32, 6, 
25, 55]


numeri_in_ordine = []
ritardo_dec = sorted(ritardo, reverse=True)


posizione = 0
for ordine in range(len(ritardo_dec)):
    if ordine > 0 and ritardo_dec[ordine] == ritardo_dec[ordine - 1]:
    non_trovato = True
    while non_trovato:  # sostituito il True
    if ritardo_dec[ordine] == ritardo[posizione + 1]:
    # posizione = ritardo.index(ritardo_dec[posizione + 1])
    numeri_in_ordine.insert(ordine, numeri[posizione + 1])  
# aggiunto +1

    non_trovato = False
    else:
    posizione += 1
    else:
    posizione = ritardo.index(ritardo_dec[ordine])
    numeri_in_ordine.insert(ordine, numeri[posizione])

print()
print(numeri)
print(ritardo)
print()
print(numeri_in_ordine)
print(ritardo_dec)


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


Re: [Python] (senza oggetto)

2020-04-30 Thread Alessandro T.

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


Re: [Python] Dove sbaglio?

2020-04-30 Thread Alessandro T.

Il 30/04/20 01:41, Marco Beri ha scritto:
On Thu, Apr 30, 2020 at 1:16 AM Carpediem <mailto:i.carped...@tiscali.it>> wrote:


Un saluto a tutti e un grazie anticipato al volenteroso che avrà
avuto la pazienza e la capacità di darmi una soluzione.

Stavo cercando di darti una mano ma poi ho realizzato lo scopo (credo) 
che c'è dietro al tuo script.


Siccome da giovane sono già passato da questa illusione ti do questo 
suggerimento:


https://www.frasicelebri.it/frase/ii-lotto-e-la-tassa-degli-imbecilli/


Lascia perdere, le palline non hanno memoria.

Ciao.
Marco.



Concordo.

Per la soluzione ti suggerisco di guardare dict(), zip() e sorted(); con 
una sola linea di codice risolvi il problema.

Nel merito: hai un ciclo `while True` senza alcuna clausola d'uscita.
Suggerimento: usa etichette più concise, ne beneficerà la lettura.

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


Re: [Python] venv + Debian

2020-03-15 Thread Alessandro T.

Grazie Daniele per le risposte

Il 15/03/20 06:18, Daniele Tricoli ha scritto:

On Thu, Mar 12, 2020 at 11:18:21AM +0100, Alessandro T. wrote:
[...]

* è possibile ripristinare l'ambiente al precedente 3.7? copiare il vecchio
python3.7 non è stato sufficiente, magari c'è una qualche procedura... al
momento non è un grosso problema: per quei progetti con moduli aggiunti creo
nuovi ambienti con '--copies' e sistemo le dipendenze. (grazie quarantena)

Fossi nei tuoi panni, semplicemente distruggerei il virtualenv e lo ricreerei
con l'interprete che mi serve.
Però la variabile  PATH viene aggiornata quando fai il source dello script
activate, quindi puoi guardare lì.
In ogni caso te lo sconsiglio, IMO non ne vale proprio la pena.

HTH,


Si si, ricreare la virtualenv non è un problema. Anche lasciare symlinks 
per non gestire gli aggiornamenti di sicurezza a mano effettivamente non 
è da sottovalutare.


Alla fine modificherò il mio workflow solo con un bel `(venv)$ pip 
freeze > pip.moduli` finale per tenere traccia dei moduli installati, 
così mi evito di po' di noia.


Grazie ancora, 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


[Python] venv + Debian

2020-03-12 Thread Alessandro T.

Ciao ML,

affascinato dalla separazione tra sistema e ambiente di sviluppo ho 
iniziato ad usare venv; principalmente perché presente nella standard 
library e perché la procedura di upgrade sembra piuttosto semplice.

Quindi, per ogni nuovo progetto un bel:

python3 -m venv venv
source venv/bin/activate
[pip ... ]
...
deactivate

convinto che non ci sarebbe stata alcuna modifica all'ambiente virtuale 
senza il mio esplicito intervento. Così è stato fino all'altro giorno, 
quando ho aggiornato da 3.7 a 3.8. Tutti gli script funzionano, tranne i 
meno utilizzati e incidentalmente quelli in cui ho installato moduli 
aggiuntivi.
A questo punto mi sono reso conto che `python3 -m venv venv` crea in 
`venv/bin`, in particolare, il link `python3 -> /usr/bin/python3`! Ma 
dove va a finire la separazione tra ambienti? Mi sono detto.
Un bel `python3 -m venv -h` ha diradato un po' di nebbia: nella mia 
configurazione il default è il symlinks!


Quindi qualche domanda:
* la scelta di symlinks è una prerogativa di Debian? per risparmiare 
10MB? ha qualche senso più profondo?

* per i prossimi progetti `python3 -m venv --copies venv` sarà sufficiente?
* dov'è possibile cambiare il comportamento predefinito da symlinks a 
copies?
* è possibile ripristinare l'ambiente al precedente 3.7? copiare il 
vecchio python3.7 non è stato sufficiente, magari c'è una qualche 
procedura... al momento non è un grosso problema: per quei progetti con 
moduli aggiunti creo nuovi ambienti con '--copies' e sistemo le 
dipendenze. (grazie quarantena)


Grazie

--
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


[Python] / nella firma di funzione

2017-04-09 Thread Alessandro T.
Ciao a tutti,

sicuramente non sono il primo ad aver notato una una '/' alla fine della
firma di una funzione nell'help, di una sessione interattiva, che però
manca nella versione "web" della stessa.

Esempio: sum

 >>> help(sum)

  sum(iterable, start=0, /)

mentre:

https://docs.python.org/3/library/functions.html?highlight=sum#sum


Allora: Cosa significa questa '/' ? Perché è presente solo in help()?


Grazie

-- 
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
http://lists.python.it/mailman/listinfo/python


Re: [Python] Stampare testo barrato

2017-01-31 Thread Alessandro T.
On 30/01/2017 21:37, Francesco Maida wrote:
>
> ..ma nel caso ti possa andare bene anche una piccola libreria Python
> per agevolarti nella scrittura, volevo solo dirti che blessing è tua
> amica ^^
>
> https://pypi.python.org/pypi/blessings/
>

Grazie per l'informazione.

Per chi fosse interessato: il problema non sta in python ma nel
terminale che compone i caratteri nell'ordine sbagliato. Infatti xterm
visualizza come per Alessandro Pisa, che ringrazio, mentre il terminale
che uso solitamente inverte l'ordine. Ora mi resta da capire se è un
problema di configurazione, comune a xfce4-terminal, lxterminal e
gnome-terminal, oppure, come dicono alcuni, una feature.

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
http://lists.python.it/mailman/listinfo/python


Re: [Python] Stampare testo barrato

2017-01-30 Thread Alessandro T.
On 30/01/2017 18:58, Esalando Prassi wrote:
> [...]
>
> Boh, non credo di aver capito bene cosa non funzioni quello che ti ho
> proposto.

http://imgur.com/rZsxT4K

>
> Ad ogni modo, puo' esserti utile fare un salto su SO:
>
> -
> http://stackoverflow.com/questions/25244454/python-create-strikethrough-strikeout-overstrike-string-type

Sì è da dove sono partito

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
http://lists.python.it/mailman/listinfo/python


Re: [Python] Stampare testo barrato

2017-01-30 Thread Alessandro T.
On 30/01/2017 16:36, Esalando Prassi wrote:
> 2017-01-30 16:12 GMT+01:00 Alessandro T. :
>> Ciao a tutti,
>>
>> esiste un modo semplice per scrivere del testo barrato sul terminale?
>> Ho provato combinando i caratteri con u+0336,  ma il risultato non è
>> soddisfacente (almeno sul mio terminale):
>>
>> print('1\u03362')
>> # 12 con il 2 barrato - ok
>> print(' \u03362')
>> # 2 con il 2 barrato - ok
>> print('\u03362')
>> # 2 - non va bene
>>
>> Suggerimenti?
>>
> Probabilmente c'e' di meglio, ma se sei alla frutta...
>
>>>> print('\u0336'.join('barrato')+'\u0336')
> b̶a̶r̶r̶a̶t̶o̶
>
> Ciao!

Ciao, è proprio da dove sono partito, ma per semplificare al massimo ho
tolto la join() e usato due caratteri.
La rappresentazione della stringa, in modalità interattiva, è corretta
ma poi la print() ...

L'unica soluzione che ho trovato, ma non soddisfacente, è d'anteporre
uno spazio.

Grazie comunque

-- 
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
http://lists.python.it/mailman/listinfo/python


[Python] Stampare testo barrato

2017-01-30 Thread Alessandro T.
Ciao a tutti,

esiste un modo semplice per scrivere del testo barrato sul terminale?
Ho provato combinando i caratteri con u+0336,  ma il risultato non è
soddisfacente (almeno sul mio terminale):

print('1\u03362')
# 12 con il 2 barrato - ok
print(' \u03362')
# 2 con il 2 barrato - ok
print('\u03362')
# 2 - non va bene

Suggerimenti?

Grazie


-- 
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
http://lists.python.it/mailman/listinfo/python


Re: [Python] argparse e opzioni mutualmente esclusive

2015-11-14 Thread Alessandro T.
On 12/11/2015 17:47, Luca wrote:
> Non so se ho capito bene, ma mi sentirei di consigliarti
>  ArgParseInator (https://pypi.python.org/pypi/ArgParseInator) che
> comunque usa anche i subparser
>
> Il giorno mer 11 nov 2015 alle ore 18:12 Manlio Perillo
> mailto:manlio.peri...@gmail.com>> ha scritto:
>
>     2015-11-11 18:02 GMT+01:00 Alessandro T.  <mailto:taglia...@yahoo.it>>:
> [...]
> >
> > Alla fine sto cercando di ottenere una cosa tipo "[-n N] [[-r] q
> | -u]"
> [...]
>
> Usa subparser!
> [...]
> E personalemente odio quando una opzione *non è* opzionale,
>

Grazie ad entrambi.

Alla fine ho seguito l'implicito consiglio di Manlio: le opzioni sono
opzioni usale come tali!

Ho usato la mutua esclusione ottenendo "[-r] [-q Q | -u]" per poi
modificare la stringa dell'help con
argparse.ArgumentParser(usage='... [[-r] -q Q | -u] ...'
e a posteriori gestendo l'opzione "-r" per farla figurare opzionale
all'opzione "-q" :-D

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
http://lists.python.it/mailman/listinfo/python


[Python] argparse e opzioni mutualmente esclusive

2015-11-11 Thread Alessandro T.
Ciao ML,

sto cercando di condensare alcuni script di manutenzione in uno unico,
razionalizzando l'interfaccia, e per l'occasione vorrei utilizzare
argparse per la gestione della CLI.
Due di questi script sono mutualmente esclusivi: il primo ha
un'interfaccia tipo "[-r] q" e il secondo "-u"; oltre a altri parametri.
Ce n'è un terzo che se richiamato con un particolare valore va a
escludere comunque l'eventuale presenza dei parametri dei primi due, ma
in genere è un'opzione e della sua gestione me ne occupo a posteriori.

Alla fine sto cercando di ottenere una cosa tipo "[-n N] [[-r] q | -u]"
però non riesco a unire "[-r] q" in un gruppo mutualmente esclusivo a "-u".
Se possibile vorrei evitare subparser per mantenere l'help il più
immediato possibile, senza sub help.

Spero di essere stato sufficientemente chiaro.

Qualche consiglio?

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
http://lists.python.it/mailman/listinfo/python