我覺得hurry.filesize
非常有用,但它不會給出十進制輸出?Python庫從字節計算人類可讀的文件大小?
例如:
print size(4026, system=alternative) gives 3 KB.
但後來當我添加的所有值我沒有得到確切的總和。例如,如果hurry.filesize
的輸出爲4個變量,每個值爲3.如果我將它們全部相加,則得到的輸出爲15.
我正在尋找hurry.filesize的替代方法以獲取小數點輸出。
我覺得hurry.filesize
非常有用,但它不會給出十進制輸出?Python庫從字節計算人類可讀的文件大小?
例如:
print size(4026, system=alternative) gives 3 KB.
但後來當我添加的所有值我沒有得到確切的總和。例如,如果hurry.filesize
的輸出爲4個變量,每個值爲3.如果我將它們全部相加,則得到的輸出爲15.
我正在尋找hurry.filesize的替代方法以獲取小數點輸出。
這是不是真的難以實現自己:
suffixes = ['B', 'KB', 'MB', 'GB', 'TB', 'PB']
def humansize(nbytes):
i = 0
while nbytes >= 1024 and i < len(suffixes)-1:
nbytes /= 1024.
i += 1
f = ('%.2f' % nbytes).rstrip('0').rstrip('.')
return '%s %s' % (f, suffixes[i])
例子:
>>> humansize(131)
'131 B'
>>> humansize(1049)
'1.02 KB'
>>> humansize(58812)
'57.43 KB'
>>> humansize(68819826)
'65.63 MB'
>>> humansize(39756861649)
'37.03 GB'
>>> humansize(18754875155724)
'17.06 TB'
這是沒有必要比@nneonneo解決方案快,它只是有點冷卻器,如果我可以這樣說:)
import math
suffixes = ['B', 'KB', 'MB', 'GB', 'TB', 'PB']
def human_size(nbytes):
human = nbytes
rank = 0
if nbytes != 0:
rank = int((math.log10(nbytes))/3)
rank = min(rank, len(suffixes) - 1)
human = nbytes/(1024.0 ** rank)
f = ('%.2f' % human).rstrip('0').rstrip('.')
return '%s %s' % (f, suffixes[rank])
這是基於這樣一個事實,即任何數字的以10爲底的對數的整數部分都小於實際的位數。其餘的很直截了當。
免責聲明:我寫的包,我將要描述的
模塊bitmath支持你所描述的功能。它還解決了@filmore所做的評論,在語義上我們應該使用NIST單元前綴(不是SI),也就是說,MiB而不是MB。 四捨五入現在也支持。
您最初問:
print size(4026, system=alternative)
在bitmath默認前綴單元系統是NIST(1024型),因此,假設你指的4026 字節,在相當於解決方案bitmath看起來像以下任何一項:
In [1]: import bitmath
In [2]: print bitmath.Byte(bytes=4026).best_prefix()
3.931640625KiB
In [3]: human_prefix = bitmath.Byte(bytes=4026).best_prefix()
In [4]: print human_prefix.format("{value:.2f} {unit}")
3.93 KiB
我現在有一個open task允許使用r使用best_prefix
方法時選擇首選的前綴單位系統。
更新:2014年7月16日具有最新的軟件包被上傳到PyPi,它包括了一些新的功能(全功能列表是the GitHub page)
我知道一些開發人員認爲這是一個「需要一個圖書館的任務太小」,但我不同意,因爲這會導致開發人員不斷重複發明。無論如何,這個圖書館正是我一直在尋找的!謝謝蒂姆! – GheloAce 2016-03-09 07:51:50
你試過'os.path.getsize ()'? – monkut 2013-02-21 07:13:24