Ciao,

Daniele Varrazzo wrote:
On Tue, 11 Jan 2011 12:29:32 +0100, "Vittorio Zuccala'"
<vittorio.zucc...@gmail.com>  wrote:
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...
Per esempio si puo' fare con un loop sui suffissi conosciuti, dividendo
per 1000 ad ogni passo, finche' hai meno di 1000 o sono finiti i suffissi.

http://diveintopython3.org/your-first-python-program.html

Comunque e' solo piu' elegante di una fila di if, non piu' efficiente.
O così ma... niente controllo errore e non credo sia meno dispendioso della serie di if (e sicuramente è anche meno leggibile), forse un po' più divertente :)

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

Lorenzo
PS: Primo post, lista molto interessante e simpatica (in giusto spirito pythonico) :)
_______________________________________________
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python

Rispondere a