>>> import os.path
>>> os.path.basename("/var/log/err.log")
'err.log'
>>> os.path.splitext(os.path.basename("/var/log/err.log"))
('err', '.log')
>>> os.path.splitext(os.path.basename("/var/log/err.log"))[0]
'err'
>>>
到目前为止,我有这个,它只适用于G(Gb)值:
d = {'Key1': [('aaaaa', '834M', '118G'),
('bbbbb', '216G', '220.3M')],
'Key2': [('ccccc', '790M', '162G'),
('ddddd', '203G', '34.8G'),
('eeeee', '126M', '112G')],
'Key3': [('fffff', '921G', '30.8M'),
('ggggg', '235G', '2.63G')]}
等等。
答案 0 :(得分:1)
我会稍微重构一下,使线条长度保持在80个字符以内,以提高可读性:
def split(j, i):
if 'G' in j[i]:
return float(j[i].split('G')[0])
return float(j[i].split('M')[0]) / 1000
for p, vl in pools.items():
alloc = ('{}G'.format(round(sum([split(j, 1) for j in vl]))))
free = ('{}G'.format(round(sum(split(j, 2) for j in vl]))))
您也可以将分割函数编写为:
def split(j, i):
suffix = j[i][-1]
value = float(j[i][:-1])
return value if suffix == 'G' else value / 1000
答案 1 :(得分:0)
我建议您编写一些函数来解析输入并以您希望的方式创建输出。
一个简单的例子可能是:
def toFloat(s):
return float(s.replace("G","e9").replace("M","e6").replace("k","e3"))
def toPString(num):
lv = math.log(num,1000)
prefs = ['k','M','G','T']
return "{:.1f}{}".format(num/(1000**int(lv)),prefs[int(lv)-1])
然后你可以这样做:
for p, vl in d.items():
alloc = toPString(sum([toFloat(l[1]) for l in vl]))
free = toPString(sum([toFloat(l[2]) for l in vl]))
print(p, alloc, free)
它给了我:
Key3 1.2T 2.7G
Key2 203.9G 308.8G
Key1 216.8G 118.2G
希望这就是你要找的东西。