2024-05-13 05:48:15 发布
网友
我使用的库读取文件并返回其字节大小。
然后,这个文件大小将显示给最终用户;为了让他们更容易理解它,我将文件大小显式地转换为MB,方法是将其除以1024.0 * 1024.0。当然可以,但我想知道是否有更好的方法在Python中实现这一点?
MB
1024.0 * 1024.0
我的意思是,也许stdlib函数可以根据我想要的类型控制大小。就像我指定MB,它会自动除以1024.0 * 1024.0。有什么线索。
有一个hurry.filesize将以字节为单位获取大小,并生成一个很好的字符串。
>>> from hurry.filesize import size >>> size(11000) '10K' >>> size(198283722) '189M'
或者如果您想要1K==1000(这是大多数用户的假设):
>>> from hurry.filesize import size, si >>> size(11000, system=si) '11K' >>> size(198283722, system=si) '198M'
它也有IEC支持(但没有记录在案):
>>> from hurry.filesize import size, iec >>> size(11000, system=iec) '10Ki' >>> size(198283722, system=iec) '189Mi'
因为它是由令人敬畏的Martijn Faassen编写的,所以代码很小、清晰且可扩展。编写自己的系统非常简单。
这里有一个:
mysystem = [ (1024 ** 5, ' Megamanys'), (1024 ** 4, ' Lotses'), (1024 ** 3, ' Tons'), (1024 ** 2, ' Heaps'), (1024 ** 1, ' Bunches'), (1024 ** 0, ' Thingies'), ]
像这样使用:
>>> from hurry.filesize import size >>> size(11000, system=mysystem) '10 Bunches' >>> size(198283722, system=mysystem) '189 Heaps'
代替大小因子1024 * 1024,您可以使用<<bitwise shifting operator,即1<<20获得兆字节,1<<30获得千兆字节,等等
1024 * 1024
<<
1<<20
1<<30
在最简单的情况下,可以有一个常量MBFACTOR = float(1<<20),然后可以与字节一起使用,即:megas = size_in_bytes/MBFACTOR。
MBFACTOR = float(1<<20)
megas = size_in_bytes/MBFACTOR
兆字节通常是您所需要的全部,或者可以使用类似的内容:
# bytes pretty-printing UNITS_MAPPING = [ (1<<50, ' PB'), (1<<40, ' TB'), (1<<30, ' GB'), (1<<20, ' MB'), (1<<10, ' KB'), (1, (' byte', ' bytes')), ] def pretty_size(bytes, units=UNITS_MAPPING): """Get human-readable file sizes. simplified version of https://pypi.python.org/pypi/hurry.filesize/ """ for factor, suffix in units: if bytes >= factor: break amount = int(bytes / factor) if isinstance(suffix, tuple): singular, multiple = suffix if amount == 1: suffix = singular else: suffix = multiple return str(amount) + suffix print(pretty_size(1)) print(pretty_size(42)) print(pretty_size(4096)) print(pretty_size(238048577)) print(pretty_size(334073741824)) print(pretty_size(96995116277763)) print(pretty_size(3125899904842624)) ## [Out] ########################### 1 byte 42 bytes 4 KB 227 MB 311 GB 88 TB 2 PB
我用的是:
import math def convert_size(size_bytes): if size_bytes == 0: return "0B" size_name = ("B", "KB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB") i = int(math.floor(math.log(size_bytes, 1024))) p = math.pow(1024, i) s = round(size_bytes / p, 2) return "%s %s" % (s, size_name[i])
注意:大小应以字节为单位发送。
有一个hurry.filesize将以字节为单位获取大小,并生成一个很好的字符串。
或者如果您想要1K==1000(这是大多数用户的假设):
它也有IEC支持(但没有记录在案):
因为它是由令人敬畏的Martijn Faassen编写的,所以代码很小、清晰且可扩展。编写自己的系统非常简单。
这里有一个:
像这样使用:
代替大小因子
1024 * 1024
,您可以使用<<
bitwise shifting operator,即1<<20
获得兆字节,1<<30
获得千兆字节,等等在最简单的情况下,可以有一个常量
MBFACTOR = float(1<<20)
,然后可以与字节一起使用,即:megas = size_in_bytes/MBFACTOR
。兆字节通常是您所需要的全部,或者可以使用类似的内容:
我用的是:
注意:大小应以字节为单位发送。
相关问题 更多 >
编程相关推荐