Re: [Python] Numero to byte
2011/1/11 Nicola Larosa n...@teknico.net Vittorio Zuccala' wrote: vi scrivo su un parere su un algoritmo... Secondo voi c'è un modo più elegante o meno dispendioso? Secondo gli sviluppatori di Django, no: http://code.djangoproject.com/browser/django/trunk/django/template/defaultfilters.py#L794 Nicola, ma, scusa, allora è proprio sbagliato quel codice! Stando a http://en.wikipedia.org/wiki/Kibibytehttp://en.wikipedia.org/wiki/Kibibyte#cite_note-1 dovrebbero o usare 1000 al posto di 1024 oppure cambiare KB (che comunque dovrebbe essere kB) in KiB, MB in MiB, ecc. Ciao. Marco. -- http://thinkcode.tv/gratis - Capire in 15 minuti cosa può fare Python http://stacktrace.it - Aperiodico di resistenza informatica http://python.thinkcode.tv - Videocorso di Python http://beri.it - Blog di una testina di vitello ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python
Re: [Python] Numero to byte
Vittorio Zuccala' wrote: vi scrivo su un parere su un algoritmo... Secondo voi c'è un modo più elegante o meno dispendioso? Nicola Larosa wrote: Secondo gli sviluppatori di Django, no: http://code.djangoproject.com/browser/django/trunk/django/template/defaultfilters.py#L794 Marco Beri wrote: Nicola, ma, scusa, allora è proprio sbagliato quel codice! Stando a http://en.wikipedia.org/wiki/Kibibyte http://en.wikipedia.org/wiki/Kibibyte#cite_note-1 dovrebbero o usare 1000 al posto di 1024 oppure cambiare KB (che comunque dovrebbe essere kB) in KiB, MB in MiB, ecc. Eh, spesso gli standard calati dall'alto si scontrano con decadi di uso pregresso: non è facile cambiare le abitudini di milioni di persone per decreto. :-) Prova a sollevare la questione su django-developers, son curioso di vedere la reazione della comunità. :-) (Non sembra se ne sia parlato lì, né trovo bug in proposito.) -- Nicola Larosa - http://www.tekNico.net/ Grief is but a gate, and our tears a kind of key, opening a place of wonder thats been locked away. - David Abram, rephrased by Dave Pollard, August 2010 ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python
[Python] twisted ipython
Ciao, mi risulta che in questa lista ci siano un certo numero di utilizzatori di twisted, quindi spero che mi possiate dare la dritta giusta sulla integrazione fra ipython e twisted. Ho trovato questa [1] ricetta di Matthew Scott seguita da un commento di Bob Ippolito che suggerisce un differente approccio. Entrambe vecchie di circa 5 anni. Nel manule di ipython trovo un po' criptica la parte relativa alle opzioni sui thread non riuscendo a capire quale si riferirebbe a twisted: -gthread, -qthread, -q4thread, -wthread, -pylab Only ONE of these can be given, and it can only be given as the first option passed to IPython (it will have no effect in any other position). They provide threading support for the GTK, QT3, QT4 and WXWidgets toolkits, for the mat- plotlib library and Twisted reactor. Quale è il modo suggerito di usare twisted da ipython? grazie sandro *:-) -- Sandro Dentella *:-) http://www.reteisi.org Soluzioni libere per le scuole http://sqlkit.argolinux.orgSQLkit home page - PyGTK/python/sqlalchemy ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python
Re: [Python] Numero to byte
# Bugfix, non ritornava per quelli sopra i 1024 PiB def f( bytes, factor=1024, labels=['', 'Ki', 'Mi', 'Gi', 'Ti', 'Pi'], precision=4 ): for x,y in map( lambda x: ( factor**(x[0]+1), ('%.' + str(precision) + 'lf %sB') % (bytes / factor**x[0], x[1]) ), enumerate(labels) ): if (bytes x): return y # è un po' bruttino return ('%.' + str(precision) + 'lf %sB') % (bytes / factor**len(labels), labels[-1]) # Test for x in range(16): y = 512.12*(10**x) print f(y) -- Wyrmskull ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python
Re: [Python] Numero to byte
lordkrandel wrote: #On 11/01/2011 15.00, Lorenzo Sutton wrote: # def bytesToHuman (b,factor=1024.): # units = ['bytes', 'KB', 'MB', 'GB', 'TB', 'PB'] # for i in xrange (1,len (units)+1): # if b factor ** i or i= len(units): # return ('%.1f %s') % ((b/(factor **(i-1))),units[i-1]) # # Che ne dici di un po' di magia Eh eh.. ai limiti dell'offuscamento ;) # Dimmi se funziona Certo che funziona.. molto carina. def f( bytes, factor=1024, labels=['', 'Ki', 'Mi', 'Gi', 'Ti', 'Pi'], precision=4 ): for x,y in map( lambda x: ( factor**(x[0]+1), ('%.' + str(precision) + 'lf %sB') % (bytes / factor**x[0], x[1]) ), enumerate(labels) ): if (bytes x) or (y == labels[-1]): return y # Test for x in range(16): y = 512.12*(10**x) print f(y) ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python
Re: [Python] Numero to byte
On 12/01/2011 11.17, enrico franchi wrote: Scusa, ma a me viene solo da dire readability counts. Era un esercizio. Ho 26 anni, non voglio fare da maestro a nessuno :) Gli if possono essere ripetuti, certo, ma anche meglio 1024 * 1024 -- 1024 ** 2 Il bugfix è veloce, ci penso un po' su e lo scrivo meglio quando ho un attimo. Comunque tutto quello che dev'essere leggibile è nei parametri della funzione, che possono essere aggiornati più facilmente. Ad esempio, da 1024 in 1000 puoi farlo direttamente dalla chiamata del metodo, invece che modificare... (5+4+3+2+1 * 2)=30 valori nel codice. E puoi anche modificare le etichette. Certo, modificare con il copia incolla piace alla gente... ^__^ '' Insomma, prendila sul ridere, guardandone gli aspetti positivi. -- Wyrmskull ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python
Re: [Python] Numero to byte
On 12/01/2011 11.29, lordkrandel wrote: Il bugfix è veloce, ci penso un po' su e lo scrivo meglio quando ho un attimo. def f( bytes, factor, labels, precision ): # costruisco una tupla di tuple ( limite massimo, etichetta ) # prima faccio l'enumerazione delle etichette, poi faccio fattore**indice for n, label in map( lambda k: ( factor**k[0], k[1] ), enumerate(labels,1) ): # se i byte sono sotto il limite, o se è l'ultima etichetta disponibile if (bytes n) or (label == labels[-1]): # ritorna una stringa formattata con i byte # con l'etichetta corrente e la precisione indicata return ('%.' + str(precision) + 'lf %s') % (bytes * factor / n, label) def f_test(): for x in range(22): y = 512.12*(10**x) print f(y, 1024, ('', 'KiB', 'MiB', 'GiB', 'TiB', 'PiB'), 4) print ' ', f(y, 1000, ('', 'KB', 'MB', 'GB', 'TB', 'PB' ), 2) f_test() Continuo a pensare che per funzioni il cui codice andrà a cambiare poco nel corso del tempo, più della chiarezza della sintassi del codice conti la chiarezza della funzionalità che offre. Certo capire come funziona non è proprio semplicissimo, ma in quello possono aiutare due righe di commento. -- Wyrmskull ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python
Re: [Python] Numero to byte
On Wed, 12 Jan 2011 12:02:57 +0100, lordkrandel lordkran...@gmail.com wrote: for n, label in map( lambda k: ( factor**k[0], k[1] ), enumerate(labels,1) ): Forse sarebbe meglio for i, label in enumerate(labels, 1): n = factor ** i ... Se leggi http://docs.python.org/library/stdtypes.html#string-formatting: # Precision (optional), given as a '.' (dot) followed by the precision. If specified as '*' (an asterisk), the actual width is read from the next element of the tuple in values, and the value to convert comes after the precision. Quindi return ('%.' + str(precision) + 'lf %s') % (bytes * factor / n, label) potrbbe essere scritto: return ('%.*lf %s') % (precision, bytes * factor / n, label) Tutto untested. -- 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] Numero to byte
On 12/01/2011 12.15, Daniele Varrazzo wrote: On Wed, 12 Jan 2011 12:02:57 +0100, lordkrandellordkran...@gmail.com wrote: for n, label in map( lambda k: ( factor**k[0], k[1] ), enumerate(labels,1) ): Forse sarebbe meglio for i, label in enumerate(labels, 1): n = factor ** i ... M'ha preso un evidente attacco di oneliner-ite return ('%.' + str(precision) + 'lf %s') % (bytes * factor / n, label) potrebbe essere scritto: return ('%.*lf %s') % (precision, bytes * factor / n, label) # Wow! Grazie!!! Quante cose s'imparano (leggendo al posto giusto). Tested! # Ora è molto più carino e pythoneggiante :) def f( bytes, factor, labels, precision ): for i, label in enumerate(labels,1): n = factor ** i if (bytes n) or (label == labels[-1]): return ('%.*lf %s') % (precision, bytes * factor / n, label) def f_test(): for x in range(22): y = 512*(10**x) print f(y, 1024, ('bytes', 'KiB', 'MiB', 'GiB', 'TiB', 'PiB'), 4) print ' ', f(y, 1000, ('bytes', 'KB', 'MB', 'GB', 'TB', 'PB' ), 2) f_test() -- Wyrmskull ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python
Re: [Python] Numero to byte
lordkrandel wrote: On 12/01/2011 11.29, lordkrandel wrote: return ('%.' + str(precision) + 'lf %s') % (bytes * factor / n, label) Una cosa importante è che bytes * factor / n lavori con float, altrimenti se viene immesso bytes e factor interi la divisione sarà intera. Credo che basti fare (untested) bytes = float (bytes) da qualche parte. Lorenzo. ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python
Re: [Python] Numero to byte
On 12/01/2011 12.25, lordkrandel wrote: def f( bytes, factor, labels, precision ): for i, label in enumerate(labels,1): n = factor ** i if (bytes n) or (label == labels[-1]): return ('%.*lf %s') % (precision, bytes * factor / n, label) def f_test(): for x in range(22): y = 512*(10**x) print f(y, 1024, ('bytes', 'KiB', 'MiB', 'GiB', 'TiB', 'PiB'), 4) print ' ', f(y, 1000, ('bytes', 'KB', 'MB', 'GB', 'TB', 'PB' ), 2) # Funziona anche con secondi, minuti e ore! ^__^ '' for x in range(5): y = 35*(10**x) print '%s s' % y print ' ', f(y, 60, ('s', 'm', 'h' ), 2) f_test() -- Wyrmskull ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python
Re: [Python] Numero to byte
On Wed, 12 Jan 2011 12:29:32 +0100, Lorenzo Sutton lsut...@libero.it wrote: lordkrandel wrote: On 12/01/2011 11.29, lordkrandel wrote: return ('%.' + str(precision) + 'lf %s') % (bytes * factor / n, label) Una cosa importante è che bytes * factor / n lavori con float, altrimenti se viene immesso bytes e factor interi la divisione sarà intera. Credo che basti fare (untested) bytes = float (bytes) da qualche parte. O anche avere from __future__ import division nel modulo. -- 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] Tornare alla versione python distribuita con osx
Ciao a tutti, ho installato python 2.7.1 per Mac, ma ora mi servirebbe usare la versione di sistema che viene distribuita con osx. Ho già modificato la path del mio .bash_profile, ma non è cambiato nulla. Ho controllato il /etc/bashrc, ma non c'è nessuna modifica della PATH, cosa devo modificare? Grazie -- K. Blog Personale: http://www.karimblog.net ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python
Re: [Python] Tornare alla versione python distribuita con osx
Il giorno 12 gennaio 2011 12:48, Karim Gorjux lemieli...@gmail.com ha scritto: Ciao a tutti, ho installato python 2.7.1 per Mac, ma ora mi servirebbe usare la versione di sistema che viene distribuita con osx. Ho già modificato la path del mio .bash_profile, ma non è cambiato nulla. Ho controllato il /etc/bashrc, ma non c'è nessuna modifica della PATH, cosa devo modificare? Guarda nel file .profile, il mio in questo momento (sto usando come te la 2.7.1) è: # Setting PATH for Python 2.7 # The orginal version is saved in .profile.pysave PATH=/Library/Frameworks/Python.framework/Versions/2.7/bin:${PATH} export PATH dovresti avere anche tu le stesse righe, commentale o vedi se hai il file .profile.pysave e ripristinalo. -- Simo - Registered Linux User #395060 - Software is like sex, it is better when it is free -- Linus B. Torvalds ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python
Re: [Python] Tornare alla versione python distribuita con osx
2011/1/12 Simone Dalla simoda...@gmail.com: Guarda nel file .profile, il mio in questo momento (sto usando come te la 2.7.1) è: Il file è il .bash_profile e ho già commentato la modifica fatta dall'installazione della 2.7.1 Proprio non capisco dove andare a toccare. -- K. Blog Personale: http://www.karimblog.net ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python
Re: [Python] Numero to byte
Pythonese def human_from_bytes(bytes, factor=1024., labels=['B', 'KiB', 'MiB', 'GiB',\ 'TiB', 'PiB'], precision=2): index = 0 while 1. * bytes / factor**index factor and index len(labels)-1: index += 1 return ('%.*lf %s') % (precision, 1.*bytes/factor**index, labels[index]) -- Andrea ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python
Re: [Python] Numero to byte
Massi`, pero` il codice qui (cito Nicola, 6a mail di questo thread) http://code.djangoproject.com/browser/django/trunk/django/template/defaultfilters.py#L794 lo trovo piu` leggibile. (Esplicito e` meglio che implicito ecc... ) Opinioni personali, eh :) On Wed, Jan 12, 2011 at 1:54 PM, Andrea Ambu andrea...@gmail.com wrote: Pythonese def human_from_bytes(bytes, factor=1024., labels=['B', 'KiB', 'MiB', 'GiB',\ 'TiB', 'PiB'], precision=2): index = 0 while 1. * bytes / factor**index factor and index len(labels)-1: index += 1 return ('%.*lf %s') % (precision, 1.*bytes/factor**index, labels[index]) -- Andrea ___ 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] Tornare alla versione python distribuita con osx
$: which python # ti dice quale esecutabile viene lanciato quando dai il comando 'python' $: alias python # ti dice se python è un alias $: /Library/Frameworks/Python.framework/Versions/??/python # se la versione vecchia di python è ancora installata, la puoi eseguire direttamente chiamandola in questo modo (oppure con bash path-to-python-bin). $: alias python=/Library/Frameworks/Python.framework/Versions/??/python # se scopri dove è installata la vecchia versione di python, puoi creare un alias in questo modo inoltre, se hai cambiato .bashrc o simile, ricordati di ricaricarlo con source: $: source ~/.bashrc non ho un sistema mac, quindi non ti posso essere utile piu' di tanto. 2011/1/12 Fabrizio Mancini mr.f...@gmail.com: 2011/1/12 Karim Gorjux lemieli...@gmail.com: Il file è il .bash_profile e ho già commentato la modifica fatta dall'installazione della 2.7.1 Proprio non capisco dove andare a toccare. Domanda stupida: hai già chiuso (CMD-Q) la finestra di terminale e riaperta? Altimenti il bash non si ricarica e non legge i nuovi settaggi. HTH Ciao Fabrizio ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python -- Giovanni Dall'Olio, phd student Department of Biologia Evolutiva at CEXS-UPF (Barcelona, Spain) My blog on bioinformatics: http://bioinfoblog.it ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python
Re: [Python] Numero to byte
def f( bytes, factor, labels, precision ): for i, label in enumerate(labels,1): if (bytes factor ** i) or (label == labels[-1]): return '%.*lf %s' % (precision, bytes / factor ** (i-1), label) Dipende a cosa ti serve. Se è solo per 1024 e per i file, quella di Django va benissimo, ma se devi convertire i millimetri in Kilometri allora dovresti fotocopiarne un'altra. On 12/01/2011 13.59, Marcello wrote: Massi`, pero` il codice qui (cito Nicola, 6a mail di questo thread) http://code.djangoproject.com/browser/django/trunk/django/template/defaultfilters.py#L794 lo trovo piu` leggibile. (Esplicito e` meglio che implicito ecc... ) Opinioni personali, eh :) On Wed, Jan 12, 2011 at 1:54 PM, Andrea Ambuandrea...@gmail.com wrote: Pythonese def human_from_bytes(bytes, factor=1024., labels=['B', 'KiB', 'MiB', 'GiB',\ 'TiB', 'PiB'], precision=2): index = 0 while 1. * bytes / factor**index factor and index len(labels)-1: index += 1 return ('%.*lf %s') % (precision, 1.*bytes/factor**index, labels[index]) -- Andrea ___ 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 -- Wyrmskull ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python
[Python] Sulla gestione degli errori
Salve a tutti, dopo qualche mese di programmazione in python mi sto cimentando sulla gestione delle eccezioni nella scrittura di un modulo. Vi scrivo perchè vorrei un parere di stile... Dato che il mio modulo csr è piuttosto affollato, ho pensato di creare un file delle sole eccezioni a parte (ha un senso come scelta?). Successivamente: *File csrErrori:* class Errore(Exception): pass class ErroreValore(Errore): def __init__(self,valore): self.valore=valore *Modulo csr:* # Varie istruzioni from csrErrori import * class elaboraInformazioni(object): Classe di prova def __init__(self): try: raise ErroreValore(pippo) except ErroreValore,ex: print Errore + ex.valore pass L'output è quello che mi aspetto: Errore pippo E' corretta come impostazione? L'idea è quella di creare questo file delle eccezioni (csrErrori) da implementare di volte in volta per l'azienda dove vado a pescare i vari errori che mi servono. ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python
Re: [Python] Sulla gestione degli errori
Ne approffitto per chiedere qualcosina su come vanno gestite le eccezioni in Python? Quali sono gli anti-pattern, cosa non fare assolutamente? Il 12 gennaio 2011 17:59, Vittorio Zuccala' vittorio.zucc...@gmail.com ha scritto: Salve a tutti, dopo qualche mese di programmazione in python mi sto cimentando sulla gestione delle eccezioni nella scrittura di un modulo. Vi scrivo perchè vorrei un parere di stile... Dato che il mio modulo csr è piuttosto affollato, ho pensato di creare un file delle sole eccezioni a parte (ha un senso come scelta?). Successivamente: File csrErrori: class Errore(Exception): pass class ErroreValore(Errore): def __init__(self,valore): self.valore=valore Modulo csr: # Varie istruzioni from csrErrori import * class elaboraInformazioni(object): Classe di prova def __init__(self): try: raise ErroreValore(pippo) except ErroreValore,ex: print Errore + ex.valore pass L'output è quello che mi aspetto: Errore pippo E' corretta come impostazione? L'idea è quella di creare questo file delle eccezioni (csrErrori) da implementare di volte in volta per l'azienda dove vado a pescare i vari errori che mi servono. ___ 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] Sulla gestione degli errori
On Wed, 12 Jan 2011 17:59:43 +0100, Vittorio Zuccala' vittorio.zucc...@gmail.com wrote: Salve a tutti, dopo qualche mese di programmazione in python mi sto cimentando sulla gestione delle eccezioni nella scrittura di un modulo. Vi scrivo perchè vorrei un parere di stile... Dato che il mio modulo csr è piuttosto affollato, ho pensato di creare un file delle sole eccezioni a parte (ha un senso come scelta?). Se un modulo e' affollato devi fare un package, non ha senso avere solo un modulo di eccezioni, sibling del modulo che lo usa. Gestire due moduli fianco a fianco e' piu' difficile che gestire un package. Per me ha senso avere un modulo di errori in un package un po' piu' che banale ma non ha senso creare un modulo di errori da riciclare per diversi script: la definizione delle eccezioni e' piccola, c'e' poco codice da duplicare; invece l'accoppiamento tra modulo di errori e chi lo usa e' massimo, quindi modificarlo diventa un campo minato. Fai attenzione a importare il modulo sempre con il percorso assoluto pero', perche' se da qualche parte usi import assoluti: from miopackage import errori e in un modulo dentro miopackage usi un import relativo: import errori rischi di importare il modulo due volte distinte, col risultato di avere le classi di errore duplicate e un except ErroreValore finirebbe col funzionare misteriosamente a volte si e a volte no. from csrErrori import * Mi sembra tu voglia usare un modulo esterno allo script. Come detto questo secondo me crea problemi. Se usi un modulo interno puoi evitare il prefisso e col nome piu' corto non ti viene la tentazione di usare * from csr import errori raise errori.ErroreValore('pippo') class elaboraInformazioni(object): Classe di prova def __init__(self): try: raise ErroreValore(pippo) except ErroreValore,ex: print Errore + ex.valore pass L'output è quello che mi aspetto: Errore pippo E' corretta come impostazione? Qui si', la cosa piu' delicata e' imparare quando usare eccezioni personali e *perche'* usarle. Usarle solo perche' hai scoperto una feature fica e la vuoi usare a tutti i costi e' solo parzialmente ok :) Qui avevo scritto ad un tizio un esempio di uso delle eccezioni custom, che e' il modo in cui mi regolo di solito: http://stackoverflow.com/questions/497952/how-to-make-python-gracefully-fail/498038#498038 L'idea è quella di creare questo file delle eccezioni (csrErrori) da implementare di volte in volta per l'azienda dove vado a pescare i vari errori che mi servono. Come detto mi aspetto che questo ti creera' piu' problemi che vantaggi. -- 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] Numero to byte
2011/1/11 Vittorio Zuccala' vittorio.zucc...@gmail.com Buongiorno a tutti, vi scrivo su un parere su un algoritmo... Ho un file con una serie di numeri che in qualche modo recupero. Questi numeri rappresentano byte, Kb, Mb, Gb, Tb... Vorrei trasformarli in modo leggibile. Ad esempio (posso immagazzinarli in un array, dizionario o altro... non importa): 172183142400=172,1Gb 250057060352=250,0Gb 132450=132,4Kb e così via. L'operazione è di per sè semplice ma l'ho risolta con una serie di if. Se maggiore di 1000, dividi per mille, e mettici kb a fianco. Se maggiore di 1000.000. Secondo voi c'è un modo più elegante o meno dispendioso? Grazie in anticipo... Ciao, io propongo questo: import math u='KMGTP' #faccio una lista di numeri fino a 10**15 L=[3.14159 * 10**n for n in range(15)] for x in L: n=int(math.log10(x)) k=n//3 x1=x/(10**(k*3)) print %s -- %.1f %s%(x,x1,u[k]+'B') Che da come output: for x in L: ... n=int(math.log10(x)) ... k=n//3 ... x1=x/(10**(k*3)) ... print %s -- %.1f %s%(x,x1,u[k]+'B') ... 3.14159 -- 3.1 KB 31.4159 -- 31.4 KB 314.159 -- 314.2 KB 3141.59 -- 3.1 MB 31415.9 -- 31.4 MB 314159.0 -- 314.2 MB 3141590.0 -- 3.1 GB 31415900.0 -- 31.4 GB 314159000.0 -- 314.2 GB 314159.0 -- 3.1 TB 3141590.0 -- 31.4 TB 31415900.0 -- 314.2 TB 3.14159e+12 -- 3.1 PB 3.14159e+13 -- 31.4 PB 3.14159e+14 -- 314.2 PB Se vuoi qualcosa di piu' compatto: n=lambda x: int(math.log10(x))//3 T=[%.1f %s%(x/(10**(n(x)*3)),u[n(x)]+'B') for x in L] e T e' la lista dei risultati: T=[%.1f %s%(x/(10**(n(x)*3)),u[n(x)]+'B') for x in L] T ['3.1 KB', '31.4 KB', '314.2 KB', '3.1 MB', '31.4 MB', '314.2 MB', '3.1 GB', '31.4 GB', '314.2 GB', '3.1 TB', '31.4 TB', '314.2 TB', '3.1 PB', '31.4 PB', '314.2 PB'] Ciao Stefano ___ 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] Sulla gestione degli errori
2011/1/12 Daniele Varrazzo p...@develer.com Qui avevo scritto ad un tizio un esempio di uso delle eccezioni custom, che e' il modo in cui mi regolo di solito: http://stackoverflow.com/questions/497952/how-to-make-python-gracefully-fail/498038#498038 Comodo anche log.exception(), che scrive il traceback senza dover chiamare print_exc() http://docs.python.org/library/logging.html#logging.Logger.exception ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python
Re: [Python] Numero to byte
Ciao, io propongo questo: import math u='KMGTP' #faccio una lista di numeri fino a 10**15 L=[3.14159 * 10**n for n in range(15)] for x in L: n=int(math.log(x,1000)) k=n x1=x/(10**(3*k)) print %s %.1f %s%(x,x1,u[k]+'B') Che da come output: for x in L: ... n=int(math.log(x,1000)) ... k=n ... x1=x/(10**(3*k)) ... print %s %.1f %s%(x,x1,u[k]+'B') ... 3.14159 3.1 KB 31.4159 31.4 KB 314.159 314.2 KB 3141.59 3.1 MB 31415.9 31.4 MB 314159.0 314.2 MB 3141590.0 3.1 GB 31415900.0 31.4 GB 314159000.0 314.2 GB 314159.0 3.1 TB 3141590.0 31.4 TB 31415900.0 314.2 TB 3.14159e+12 3.1 PB 3.14159e+13 31.4 PB 3.14159e+14 314.2 PB Se vuoi qualcosa di piu' compatto: n=lambda x: int(math.log(x,1000)) T=[%.1f %s%(x/(10**(n(x)*3)),u[n(x)]+'B') for x in L] T ['3.1 KB', '31.4 KB', '314.2 KB', '3.1 MB', '31.4 MB', '314.2 MB', '3.1 GB', '31.4 GB', '314.2 GB', '3.1 TB', '31.4 TB', '314.2 TB', '3.1 PB', '31.4 PB', '314.2 PB'] Se vuoi 1KB == 1024B metti 1024 al posto di mille in math.log Ciao Stefano 2011/1/11 Vittorio Zuccala' vittorio.zucc...@gmail.com Buongiorno a tutti, vi scrivo su un parere su un algoritmo... Ho un file con una serie di numeri che in qualche modo recupero. Questi numeri rappresentano byte, Kb, Mb, Gb, Tb... Vorrei trasformarli in modo leggibile. Ad esempio (posso immagazzinarli in un array, dizionario o altro... non importa): 172183142400=172,1Gb 250057060352=250,0Gb 132450=132,4Kb e così via. L'operazione è di per sè semplice ma l'ho risolta con una serie di if. Se maggiore di 1000, dividi per mille, e mettici kb a fianco. Se maggiore di 1000.000. Secondo voi c'è un modo più elegante o meno dispendioso? Grazie in anticipo... ___ 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] Numero to byte
2011/1/12 Marco Mariani bir...@gmail.com: va bene tutto purche' smettiate di ridefinire la builtin 'bytes'... :-) Ma dai, mi pare difficile che ci sia bisogno di utilizzarla in un eventuale refactor di quella funzione :P -- Andrea ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python