Re: [Python] controllo della data

2012-07-28 Per discussione Giorgio Zoppi
se non sbaglio la data avra un formato.
Supponi che il formato sia
02/04/1980

basta una esperessione regolare e hai risolto, guardati il modulo di
espressioni regolari e l'ottimo Regular Expression Howto.

Il 28 luglio 2012 08:53, infs...@libero.it  ha scritto:
> Salve, da una settimana sto smanettando con Python e ho una marea di domande.
> Comincio con la prima, le altre strada facendo.
> Esiste in Python un modo per controllare una data immessa da input (es.
> data=raw_input ('immetti data') )? Per ora me la sto cavando con il
> sezionamento della data in parti e controllare ciascuna parte con delle if. Ma
> anche qui ho un problema, come si fa in caso di errore a ritornare alla riga 
> di
> input (qualcosa tipo "resume" o "go to").
> Tante grazie
> NSantini
> ___
> Python mailing list
> Python@lists.python.it
> http://lists.python.it/mailman/listinfo/python



-- 
Quiero ser el rayo de sol que cada día te despierta
para hacerte respirar y vivir en me.
"Favola -Moda".
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] controllo della data

2012-07-28 Per discussione Marco Mariani
2012/7/28 Giorgio Zoppi 

se non sbaglio la data avra un formato.
> Supponi che il formato sia
> 02/04/1980
>
> basta una esperessione regolare e hai risolto, guardati il modulo di
> espressioni regolari e l'ottimo Regular Expression Howto.
>

>>> import datetime
>>> datetime.datetime.strptime('02/04/1980', '%d/%m/%Y')
datetime.datetime(1980, 4, 2, 0, 0)
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] controllo della data

2012-07-28 Per discussione Marco Beri
2012/7/28 Giorgio Zoppi 

> se non sbaglio la data avra un formato.
> Supponi che il formato sia
> 02/04/1980
> basta una esperessione regolare e hai risolto, guardati il modulo di
> espressioni regolari e l'ottimo Regular Expression Howto.
>

Eh, non è esattamente la soluzione migliore. Sembri me stesso quando, agli
arbori, programmando in C (stiamo parlando del 1985!), siccome avevo letto
solo il K&C, mi riscrissi tutte le funzioni strcpy, strcat, ecc. :-)

La documentazione che NSantini deve leggere è quella del modulo datetime.

Per quanto riguarda la domanda sul "goto" glissiamo... Io ci metterei un
loop tipo: while not data_ok:

Ciao.
Marco.

-- 
http://beri.it/ - Un blog
http://beri.it/i-miei-libri/ - Qualche libro
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] controllo della data

2012-07-28 Per discussione Giorgio Zoppi
Marco compariamo

RegExp:
import re

date = "01/02/1988"
checkdate ="^(0[1-9]|[12][0-9]|3[01])[- /.](0[1-9]|1[012])[- /.](19|20)\d\d"
obj = re.compile(checkdate)
if (re.match(date)):
 print 'Valid date'


Datetime
from datetime import datetime
date = '10/12/1977'
input = date.replace("/","")
result = None
format = ['%d%m%Y']
  try:
result = datetime.strptime(input, format)
  except:
 pass

if (result):
print "Validate"


Il secondo e' piu pythonico...ma lungo. Hai altre opzioni?
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] controllo della data

2012-07-28 Per discussione Nicola Larosa
Giorgio Zoppi wrote:
>   except:
>  pass

Tu andrai all'inferno per questo, lo sai sì?


> Il secondo e' piu pythonico...

Se 'sta roba è pythonica, io sono Mastro Geppetto.

-- 
Nicola Larosa - http://www.tekNico.net/

Most women experimentally are bisexual. If you give testosterone shots
to heterosexual men they become more obsessed with women. If you give
it to gay men they become more obsessed with men, to lesbians they
become more obsessed with women. If you give the same shot to a
heterosexual woman she becomes more obsessed with everybody.
 - Christopher Ryan, March 2012

___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] controllo della data

2012-07-28 Per discussione Andrea Francia
On Sat, Jul 28, 2012 at 8:49 PM, Giorgio Zoppi wrote:
>
> Datetime
> from datetime import datetime
> date = '10/12/1977'
> input = date.replace("/","")
> result = None
> format = ['%d%m%Y']
>   try:
> result = datetime.strptime(input, format)
>   except:
>  pass
>
> if (result):
> print "Validate"
>

A parte l'uso scorretto delle eccezioni questa non é una validazione
corretta.
Accetterebbe anche 101/2/1977 come data valida e lo convertirebbe (credo) a
10/12/1977.

Ciao
-- 
Andrea Francia http://andreafrancia.it
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] controllo della data

2012-07-28 Per discussione Daniele Varrazzo

On 2012-07-28 19:49, Giorgio Zoppi wrote:

Marco compariamo

RegExp:
import re

date = "01/02/1988"
checkdate ="^(0[1-9]|[12][0-9]|3[01])[- /.](0[1-9]|1[012])[- 
/.](19|20)\d\d"

obj = re.compile(checkdate)
if (re.match(date)):
 print 'Valid date'


Ti dice anche se un anno è bisestile?


Datetime
from datetime import datetime
date = '10/12/1977'
input = date.replace("/","")
result = None
format = ['%d%m%Y']
  try:
result = datetime.strptime(input, format)
  except:
 pass

if (result):
print "Validate"


Il secondo e' piu pythonico...ma lungo. Hai altre opzioni?


Basta toglierci tutta la roba che non serve. Che poi che vuol dire, più 
un pezzo di codice è corto e meglio è? L'estetica del perl?


from datetime import datetime
input = '10/12/1977'
try:
result = datetime.strptime(input, '%d/%m/%Y')
except ValueError:
result = None

(sebbene l'aggettivo "Pythonico" non sia esattamente ben definito, il 
tuo esempio *veramente* non lo era..)



--
Daniele Varrazzo - Develer S.r.l.
http://www.develer.com
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] controllo della data

2012-07-28 Per discussione Alberto Granzotto
2012/7/28 Daniele Varrazzo 

> On 2012-07-28 19:49, Giorgio Zoppi wrote:
>
>> Marco compariamo
>>
>> RegExp:
>> import re
>>
>> date = "01/02/1988"
>> checkdate ="^(0[1-9]|[12][0-9]|3[01])[- /.](0[1-9]|1[012])[-
>> /.](19|20)\d\d"
>> obj = re.compile(checkdate)
>> if (re.match(date)):
>>  print 'Valid date'
>>
>
> Ti dice anche se un anno è bisestile?
>
>
>  Datetime
>> from datetime import datetime
>> date = '10/12/1977'
>> input = date.replace("/","")
>> result = None
>> format = ['%d%m%Y']
>>   try:
>> result = datetime.strptime(input, format)
>>   except:
>>  pass
>>
>> if (result):
>> print "Validate"
>>
>>
>> Il secondo e' piu pythonico...ma lungo. Hai altre opzioni?
>>
>
> Basta toglierci tutta la roba che non serve. Che poi che vuol dire, più un
> pezzo di codice è corto e meglio è? L'estetica del perl?
>
> from datetime import datetime
> input = '10/12/1977'
> try:
> result = datetime.strptime(input, '%d/%m/%Y')
> except ValueError:
> result = None
>
> (sebbene l'aggettivo "Pythonico" non sia esattamente ben definito, il tuo
> esempio *veramente* non lo era..)


totalmente d'accordo, e non sono nemmeno sostituibili. Semplicemente quella
con le RegExp è sbagliata, l'altra no, perché?

import re
re.match(
"^(0[1-9]|[12][0-9]|3[01])[- /.](0[1-9]|1[012])[- /.](19|20)\d\d",
"31/02/1988") # nota bene, il 31 febbraio probabilmente non esiste

In questo caso con la regexp puoi magari avvicinarti alla correttezza, puoi
farle estremamente sofisticate e riconoscere i mesi da 30/31/28 giorni e
arrivare a considerare gli anni bisestili ottenendo qualcosa tipo:

 
^(?:(?:(?:0?[13578]|1[02])(\/|-|\.)31)\1|(?:(?:0?[1,3-9]|1[0-2])(\/|-|\.)(?:29|30)\2))(?:(?:1[6-9]|[2-9]\d)?\d{2})$|^(?:0?2(\/|-|\.)29\3(?:(?:(?:1[6-9]|[2-9]\d)?(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00$|^(?:(?:0?[1-9])|(?:1[0-2]))(\/|-|\.)(?:0?[1-9]|1\d|2[0-8])\4(?:(?:1[6-9]|[2-9]\d)?\d{2})$
[via ]

ma si tratterebbe probabilmente di masturbazione più che programmazione :P

[scusate ho letto ora "ti dice anche se l'anno è bisestile, ma ormai avevo
scritto! :P]


> --
> Daniele Varrazzo - Develer S.r.l.
> http://www.develer.com
>
> __**_
> Python mailing list
> Python@lists.python.it
> http://lists.python.it/**mailman/listinfo/python
>
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] controllo della data

2012-07-28 Per discussione Giorgio Zoppi
ok. L'esempio di daniele e quello corretto..Buona serata!

Il 28 luglio 2012 21:42, Alberto Granzotto  ha scritto:
>
>
> 2012/7/28 Daniele Varrazzo 
>>
>> On 2012-07-28 19:49, Giorgio Zoppi wrote:
>>>
>>> Marco compariamo
>>>
>>> RegExp:
>>> import re
>>>
>>> date = "01/02/1988"
>>> checkdate ="^(0[1-9]|[12][0-9]|3[01])[- /.](0[1-9]|1[012])[-
>>> /.](19|20)\d\d"
>>> obj = re.compile(checkdate)
>>> if (re.match(date)):
>>>  print 'Valid date'
>>
>>
>> Ti dice anche se un anno è bisestile?
>>
>>
>>> Datetime
>>> from datetime import datetime
>>> date = '10/12/1977'
>>> input = date.replace("/","")
>>> result = None
>>> format = ['%d%m%Y']
>>>   try:
>>> result = datetime.strptime(input, format)
>>>   except:
>>>  pass
>>>
>>> if (result):
>>> print "Validate"
>>>
>>>
>>> Il secondo e' piu pythonico...ma lungo. Hai altre opzioni?
>>
>>
>> Basta toglierci tutta la roba che non serve. Che poi che vuol dire, più un
>> pezzo di codice è corto e meglio è? L'estetica del perl?
>>
>> from datetime import datetime
>> input = '10/12/1977'
>> try:
>> result = datetime.strptime(input, '%d/%m/%Y')
>> except ValueError:
>> result = None
>>
>> (sebbene l'aggettivo "Pythonico" non sia esattamente ben definito, il tuo
>> esempio *veramente* non lo era..)
>
>
> totalmente d'accordo, e non sono nemmeno sostituibili. Semplicemente quella
> con le RegExp è sbagliata, l'altra no, perché?
>
> import re
> re.match(
> "^(0[1-9]|[12][0-9]|3[01])[- /.](0[1-9]|1[012])[- /.](19|20)\d\d",
> "31/02/1988") # nota bene, il 31 febbraio probabilmente non esiste
>
> In questo caso con la regexp puoi magari avvicinarti alla correttezza, puoi
> farle estremamente sofisticate e riconoscere i mesi da 30/31/28 giorni e
> arrivare a considerare gli anni bisestili ottenendo qualcosa tipo:
>
>
> ^(?:(?:(?:0?[13578]|1[02])(\/|-|\.)31)\1|(?:(?:0?[1,3-9]|1[0-2])(\/|-|\.)(?:29|30)\2))(?:(?:1[6-9]|[2-9]\d)?\d{2})$|^(?:0?2(\/|-|\.)29\3(?:(?:(?:1[6-9]|[2-9]\d)?(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00$|^(?:(?:0?[1-9])|(?:1[0-2]))(\/|-|\.)(?:0?[1-9]|1\d|2[0-8])\4(?:(?:1[6-9]|[2-9]\d)?\d{2})$
> [via ]
>
> ma si tratterebbe probabilmente di masturbazione più che programmazione :P
>
> [scusate ho letto ora "ti dice anche se l'anno è bisestile, ma ormai avevo
> scritto! :P]
>
>
>>
>> --
>> Daniele Varrazzo - Develer S.r.l.
>> http://www.develer.com
>>
>> ___
>> Python mailing list
>> Python@lists.python.it
>> http://lists.python.it/mailman/listinfo/python
>
>
>
> ___
> Python mailing list
> Python@lists.python.it
> http://lists.python.it/mailman/listinfo/python
>



-- 
Quiero ser el rayo de sol que cada día te despierta
para hacerte respirar y vivir en me.
"Favola -Moda".
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] controllo della data

2012-07-28 Per discussione Daniele Varrazzo

On 2012-07-28 20:42, Alberto Granzotto wrote:



^(?:(?:(?:0?[13578]|1[02])(\/|-|\.)31)\1|(?:(?:0?[1,3-9]|1[0-2])(\/|-|\.)(?:29|30)\2))(?:(?:1[6-9]|[2-9]\d)?\d{2})$|^(?:0?2(\/|-|\.)29\3(?:(?:(?:1[6-9]|[2-9]\d)?(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00$|^(?:(?:0?[1-9])|(?:1[0-2]))(\/|-|\.)(?:0?[1-9]|1\d|2[0-8])\4(?:(?:1[6-9]|[2-9]\d)?\d{2})$
[via ]

ma si tratterebbe probabilmente di masturbazione più che 
programmazione :P


[scusate ho letto ora "ti dice anche se l'anno è bisestile, ma ormai 
avevo

scritto! :P]


No, anzi, grazie per questo capolavoro!

--
Daniele Varrazzo - Develer S.r.l.
http://www.develer.com
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] controllo della data

2012-07-28 Per discussione Marco Beri
Il giorno 28/lug/2012, alle ore 22:40, Daniele Varrazzo 
ha scritto:

No, anzi, grazie per questo capolavoro!


E allora mi sento in dovere di copia-incollare il paragrafo di un
famosissimo libro :-)

Ciao.
Marco.


Ma.attenzione.a.non.esagerare!

Esiste un detto famoso riguardante le regular expression:

Un tizio aveva un problema e disse "So come risolverlo: userò una regular
expression!". E così il tizio ebbe due problemi...

Non crediamo che sia così, però bisogna fare attenzione a usare le re-
gular expression per quello che sono, senza esagerare.

Come ultimo esempio vogliamo dare un'occhiata a una regular ex- pression
che forse non rispetta il consiglio di non esagerare.

Si tratta di una regular expression che controlla la correttezza di un
indirizzo email:

   ^((([a-z]|[0-9]|!|#|$|%|&|'|\*|\+|\-|/|=|\?|\^|_|`|
   \{|\||\}|~)+(\.([a-z]|[0-9]|!|#|$|%|&|'|\*|\+|\-|/|
   =|\?|\^|_|`|\{|\||\}|~)+)*)@([a-z]|[0-9])([a-z]
   |[0-9]|\-){0,61}([a-z]|[0-9])\.))*([a-z]|[0-9])([a-
   z]|[0-9]|\-){0,61}([a-z]|[0-9])\.(af|ax|al|dz|as|ad
   |ao|ai|aq|ag|ar|am|aw|au|at|az|bs|bh|bd|bb|by|be|bz
   |bj|bm|bt|bo|ba|bw|bv|br|io|bn|bg|bf|bi|kh|cm|ca|cv
   |ky|cf|td|cl|cn|cx|cc|co|km|cg|cd|ck|cr|ci|hr|cu|cy
   |cz|dk|dj|dm|do|ec|eg|sv|gq|er|ee|et|fk|fo|fj|fi|fr
   |gf|pf|tf|ga|gm|ge|de|gh|gi|gr|gl|gd|gp|gu|gt|gg|gn
   |gw|gy|ht|hm|va|hn|hk|hu|is|in|id|ir|iq|ie|im|il|it
   |jm|jp|je|jo|kz|ke|ki|kp|kr|kw|kg|la|lv|lb|ls|lr|ly
   |li|lt|lu|mo|mk|mg|mw|my|mv|ml|mt|mh|mq|mr|mu|yt|mx
   |fm|md|mc|mn|ms|ma|mz|mm|na|nr|np|nl|an|nc|nz|ni|ne
   |ng|nu|nf|mp|no|om|pk|pw|ps|pa|pg|py|pe|ph|pn|pl|pt
   |pr|qa|re|ro|ru|rw|sh|kn|lc|pm|vc|ws|sm|st|sa|sn|cs
   |sc|sl|sg|sk|si|sb|so|za|gs|es|lk|sd|sr|sj|sz|se|ch
   |sy|tw|tj|tz|th|tl|tg|tk|to|tt|tn|tr|tm|tc|tv|ug|ua
   |ae|gb|us|um|uy|uz|vu|ve|vn|vg|vi|wf|eh|ye|zm|zw|co
   m|edu|gov|int|mil|net|org|biz|info|name|pro|aero|coop

   |museum|arpa))|[0-9]){1,3}\.){3}([0-9]){1,3})




1 Appendice B



[image: page188image1196]


   
)|(\[((([0-9]){1,3}\.){3}([0-9]){1,3})\])))$

Questo capolavoro di ingegnosità (e di costanza) è dovuto ad un certo
Philippe Benthien che l'ha inserito nel sito http://re- gexlib.com

Siamo sicuri che questa regular expression controlla alla perfezione la
correttezza formale di un indirizzo email.

Però se il signor Mario Rossi, il cui indirizzo è
mario.ro...@posta.it scrivesse
per errore mario.ri...@posta.it, la regular expression non gli direbbe che
ha sbagliato. Viceversa il signor John Smith. il cui indi- rizzo email è
john.sm...@people.mobi, non potrebbe inserire il suo indirizzo se il
controllo fosse affidato a questa regular expression...

Per la cronaca .mobi è un dominio di primo livello introdotto nel 2006.
<>___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] controllo della data

2012-07-28 Per discussione Giorgio Zoppi
interessante...

Il giorno 28 luglio 2012 23:05, Marco Beri  ha scritto:

>
> Il giorno 28/lug/2012, alle ore 22:40, Daniele Varrazzo 
> ha scritto:
>
> No, anzi, grazie per questo capolavoro!
>
>
> E allora mi sento in dovere di copia-incollare il paragrafo di un
> famosissimo libro :-)
>
> Ciao.
> Marco.
>
>
> Ma.attenzione.a.non.esagerare!
>
> Esiste un detto famoso riguardante le regular expression:
>
> Un tizio aveva un problema e disse "So come risolverlo: userò una regular
> expression!". E così il tizio ebbe due problemi...
>
> Non crediamo che sia così, però bisogna fare attenzione a usare le re-
> gular expression per quello che sono, senza esagerare.
>
> Come ultimo esempio vogliamo dare un'occhiata a una regular ex- pression
> che forse non rispetta il consiglio di non esagerare.
>
> Si tratta di una regular expression che controlla la correttezza di un
> indirizzo email:
>
>^((([a-z]|[0-9]|!|#|$|%|&|'|\*|\+|\-|/|=|\?|\^|_|`|
>\{|\||\}|~)+(\.([a-z]|[0-9]|!|#|$|%|&|'|\*|\+|\-|/|
>=|\?|\^|_|`|\{|\||\}|~)+)*)@([a-z]|[0-9])([a-z]
>|[0-9]|\-){0,61}([a-z]|[0-9])\.))*([a-z]|[0-9])([a-
>z]|[0-9]|\-){0,61}([a-z]|[0-9])\.(af|ax|al|dz|as|ad
>|ao|ai|aq|ag|ar|am|aw|au|at|az|bs|bh|bd|bb|by|be|bz
>|bj|bm|bt|bo|ba|bw|bv|br|io|bn|bg|bf|bi|kh|cm|ca|cv
>|ky|cf|td|cl|cn|cx|cc|co|km|cg|cd|ck|cr|ci|hr|cu|cy
>|cz|dk|dj|dm|do|ec|eg|sv|gq|er|ee|et|fk|fo|fj|fi|fr
>|gf|pf|tf|ga|gm|ge|de|gh|gi|gr|gl|gd|gp|gu|gt|gg|gn
>|gw|gy|ht|hm|va|hn|hk|hu|is|in|id|ir|iq|ie|im|il|it
>|jm|jp|je|jo|kz|ke|ki|kp|kr|kw|kg|la|lv|lb|ls|lr|ly
>|li|lt|lu|mo|mk|mg|mw|my|mv|ml|mt|mh|mq|mr|mu|yt|mx
>|fm|md|mc|mn|ms|ma|mz|mm|na|nr|np|nl|an|nc|nz|ni|ne
>|ng|nu|nf|mp|no|om|pk|pw|ps|pa|pg|py|pe|ph|pn|pl|pt
>|pr|qa|re|ro|ru|rw|sh|kn|lc|pm|vc|ws|sm|st|sa|sn|cs
>|sc|sl|sg|sk|si|sb|so|za|gs|es|lk|sd|sr|sj|sz|se|ch
>|sy|tw|tj|tz|th|tl|tg|tk|to|tt|tn|tr|tm|tc|tv|ug|ua
>|ae|gb|us|um|uy|uz|vu|ve|vn|vg|vi|wf|eh|ye|zm|zw|co
>m|edu|gov|int|mil|net|org|biz|info|name|pro|aero|coop
>
>|museum|arpa))|[0-9]){1,3}\.){3}([0-9]){1,3})
>
>
>   
>   
>   1   Appendice B
>
>   
>   
>   [image: page188image1196]
>   
>   
>  
> )|(\[((([0-9]){1,3}\.){3}([0-9]){1,3})\])))$
>
> Questo capolavoro di ingegnosità (e di costanza) è dovuto ad un certo
> Philippe Benthien che l'ha inserito nel sito http://re- gexlib.com
>
> Siamo sicuri che questa regular expression controlla alla perfezione la
> correttezza formale di un indirizzo email.
>
> Però se il signor Mario Rossi, il cui indirizzo è mario.ro...@posta.it 
> scrivesse
> per errore mario.ri...@posta.it, la regular expression non gli direbbe
> che ha sbagliato. Viceversa il signor John Smith. il cui indi- rizzo email
> è john.sm...@people.mobi, non potrebbe inserire il suo indirizzo se il
> controllo fosse affidato a questa regular expression...
>
> Per la cronaca .mobi è un dominio di primo livello introdotto nel 2006.
>
>
> ___
> Python mailing list
> Python@lists.python.it
> http://lists.python.it/mailman/listinfo/python
>
>


-- 
Quiero ser el rayo de sol que cada día te despierta
para hacerte respirar y vivir en me.
"Favola -Moda".
<>___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python