Python,人类可读的字节转换
我试图在python中将人类可读的形式转换为字节。我计算了字节到人类可读的形式,但我无法计算它的相反方向 我尝试了stackowerflow中的一些代码,但无法完美运行,或者找不到正确的代码Python,人类可读的字节转换,python,Python,我试图在python中将人类可读的形式转换为字节。我计算了字节到人类可读的形式,但我无法计算它的相反方向 我尝试了stackowerflow中的一些代码,但无法完美运行,或者找不到正确的代码 @staticmethod def byte_to_human_read(byte): if byte == 0: raise ValueError("Size is not valid.") byte = int(byte) size_name = ("B", "K
@staticmethod
def byte_to_human_read(byte):
if byte == 0:
raise ValueError("Size is not valid.")
byte = int(byte)
size_name = ("B", "KB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB")
index = int(math.floor(math.log(byte, 1024)))
power = math.pow(1024, index)
size = round(byte / power, 2)
return "{} {}".format(size, size_name[index])
@staticmethod
def human_read_to_byte(size):
- I need here -
我需要def human_read_to_byte(size)函数
示例:输入->1GB输出->1073741824(字节)所以您已经有了大小列表,对吗?做同样的事情,但方向相反:
def human_read_to_byte(size):
size_name = ("B", "KB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB")
size = size.split() # divide '1 GB' into ['1', 'GB']
num, unit = int(size[0]), size[1]
idx = size_name.index(unit) # index in list of sizes determines power to raise it to
factor = 1024 ** idx # ** is the "exponent" operator - you can use it instead of math.pow()
return num * factor
当然,您需要在其中构建一些错误处理,但这相当简单-您已经为
字节到人的读取()做了一些工作您可以使用如下方法。字典用于保存缩写到数字因子的转换。虽然字符串解析不是防弹的,但它可以处理输入中的多个空格或没有空格,还可以处理小写字符
CONVERSION_FACTORS = { "B": 1, "KB":1024, "MB":1048576, "GB": 1073741824, "TB": 1099511627776, "PB": 1125899906842624, "EB":1152921504606846976 , "ZB": 1180591620717411303424, "YB": 1208925819614629174706176}
def human_read_to_byte(size):
num_ndx = 0
while num_ndx < len(size):
if str.isdigit(size[num_ndx]):
num_ndx += 1
else:
break
num_part = int(size[:num_ndx])
str_part = size[num_ndx:].strip().upper()
return num_part * CONVERSION_FACTORS[str_part]
CONVERSION_FACTORS={“B”:1,“KB”:1024,“MB”:1048576,“GB”:1073741824,“TB”:109951162776,“PB”:1125899906842624,“EB”:1152921504606846976,“ZB”:11805916207411303424,“YB”:120892581961462174706176}
def人工读取字节(大小):
num_ndx=0
而num_ndx
正如对的评论所说,您可能需要的不是这里。如果是这样的话,解析就有点复杂了。多亏了这些问题和答案,我想出了一个简短的代码,可以处理拆分(1b)和紧凑(10KB)格式。小心,代码在某些上下文中可能很脆弱,我的输入非常严格
def human_read_to_byte(size):
factors = {'B': 1, 'KB':1024, 'MB':1048576, 'GB': 1073741824, 'TB': 1099511627776, 'PB': 1125899906842624, 'EB':1152921504606846976 , 'ZB': 1180591620717411303424, 'YB': 1208925819614629174706176}
if size[-2:] in factors:
return factors[size[-2:]]*float(size[:-2])
return float(size[:-1])
这个问题的一个改进可能是提供一些示例。只要颠倒极性…谢谢@Green Clope Guy,它将解决我的问题。可能是float(size[0])
而不是int(…)