[Python] Numero to byte

Lorenzo Sutton lsutton a libero.it
Mar 11 Gen 2011 15:00:38 CET


Ciao,

Daniele Varrazzo wrote:
> On Tue, 11 Jan 2011 12:29:32 +0100, "Vittorio Zuccala'"
> <vittorio.zuccala a 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) :)


Maggiori informazioni sulla lista Python