2016-05-10 81 views
-3

我有一個變量,其中包含一個位的值,例如10000000代表10mb。我想寫一個函數,從一個值的位,返回一個字符串與正確的單位,並正確轉換。Python中的多位操作

示例如果我使用52200000,它返回52.2mb。

我不知道該怎麼做。有人可以幫忙,謝謝

+1

10000000字節不是10 MB。 –

+0

您可以發佈五個或十個其他示例輸入和輸出嗎? –

+0

這將字節格式化爲人類可讀:http://stackoverflow.com/questions/1094841/reusable-library-to-get-human-readable-version-of-file-size – Schore

回答

1
def humanize(n): 
    base=1000.0 # replace with 1024 if you want kib Mib etc 
    letters=['','k','M','G','T','P','E','Z','Y'] 
    f=float(n) 
    for x in letters: 
     if f < base: break 
     f /= base 
    return '{:.3}{}b'.format(f,x) # change {}b to {}ib if working with kib etc. 

這些天,Mb通常指的是一個十進制的百萬字節,而Mib通常指的是它們的1024 * 1024。這段代碼很容易切換。

+0

Mb是指Million * Bits *,MB是Million * Bytes * – SiHa

0
def bytesto(bytes, to, bsize=1000): 
    a = {'k' : 1, 'm': 2, 'g' : 3, 't' : 4, 'p' : 5, 'e' : 6 } 
    r = float(bytes) 
    for i in range(a[to]): 
     r = r/bsize 
    return(r) 

可以使用上述函數將字節轉換爲KB,MB,GB,TB

  • 字節轉換爲KB print(bytesto(314575262000000, 'k')) # 314575262000.0 KB
  • 轉換字節MB print(bytesto(314575262000000, 'm')) # 314575262.0 MB
  • 將字節轉換爲TB print(bytesto(314575262000000, 't')) # 314.575262 TB
+0

你混淆MB(= 1000B)和MiB(= 1024B) - 請參閱:https://en.wikipedia.org/wiki/Binary_prefix – mata

+0

@mata瞭解MIB和MB之間的區別。謝謝 –