Python,从数据输入中添加两个值

时间:2018-06-15 13:47:57

标签: python string parsing

明星到了这一点: 我的意见:

>>> 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')]}

等等。

2 个答案:

答案 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

希望这就是你要找的东西。