<br><br><div class="gmail_quote">2011/1/11 Vittorio Zuccala' <span dir="ltr"><<a href="mailto:vittorio.zuccala@gmail.com">vittorio.zuccala@gmail.com</a>></span><br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
Buongiorno a tutti,<br>vi scrivo su un parere su un algoritmo...<br>Ho un file con una serie di numeri che in qualche modo recupero.<br>Questi numeri rappresentano byte, Kb, Mb, Gb, Tb...<br>Vorrei trasformarli in modo leggibile.<br>


Ad esempio (posso immagazzinarli in un array, dizionario o altro... non importa):<br><br>172183142400=>172,1Gb<br>250057060352=>250,0Gb<br>132450=>132,4Kb<br><br>e cosė via.<br>L'operazione č di per sč semplice ma l'ho risolta con una serie di if.<br>


Se maggiore di 1000, dividi per mille, e mettici kb a fianco.<br>Se maggiore di 1000.000.....<br><br>Secondo voi c'č un modo pių elegante o meno "dispendioso"?<br>Grazie in anticipo...<br>
<br></blockquote><div>Ciao, io propongo questo:<br>import math<br>u='KMGTP'<br>#faccio una lista di numeri fino a 10**15<br>L=[3.14159 * 10**n for n in range(15)]<br><br>for x in L:<br>    n=int(math.log10(x))<br>
    k=n//3<br>    x1=x/(10**(k*3))<br>    print "%s --> %.1f %s"%(x,x1,u[k]+'B')<br><br>Che da come output:<br><br>>>> for x in L:<br>...     n=int(math.log10(x))<br>...     k=n//3<br>...     x1=x/(10**(k*3))<br>
...     print "%s --> %.1f %s"%(x,x1,u[k]+'B')<br>... <br>3.14159 --> 3.1 KB<br>31.4159 --> 31.4 KB<br>314.159 --> 314.2 KB<br>3141.59 --> 3.1 MB<br>31415.9 --> 31.4 MB<br>314159.0 --> 314.2 MB<br>
3141590.0 --> 3.1 GB<br>31415900.0 --> 31.4 GB<br>314159000.0 --> 314.2 GB<br>3141590000.0 --> 3.1 TB<br>31415900000.0 --> 31.4 TB<br>314159000000.0 --> 314.2 TB<br>3.14159e+12 --> 3.1 PB<br>3.14159e+13 --> 31.4 PB<br>
3.14159e+14 --> 314.2 PB<br><br>Se vuoi qualcosa di piu' compatto:<br><br>n=lambda x: int(math.log10(x))//3<br>T=["%.1f %s"%(x/(10**(n(x)*3)),u[n(x)]+'B') for x in L]<br><br>e T e' la lista dei risultati:<br>
>>> T=["%.1f %s"%(x/(10**(n(x)*3)),u[n(x)]+'B') for x in L]<br>>>> T<br>['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']<br>
<br>Ciao<br><br>Stefano<br><br> <br></div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">_______________________________________________<br>

Python mailing list<br>
<a href="mailto:Python@lists.python.it">Python@lists.python.it</a><br>
<a href="http://lists.python.it/mailman/listinfo/python" target="_blank">http://lists.python.it/mailman/listinfo/python</a><br>
<br></blockquote></div><br>