Python-拆分一行数字,其中一些数字包含破折号

Python-拆分一行数字,其中一些数字包含破折号,python,split,delimiter,Python,Split,Delimiter,我有一个数据集,其中的线条类似: G. Smith 2.2 - 1.6 1.0 - 1.5 33 - 55 660 F. John 1.4 - 0.2. 60 850 (early) - 1100 (late) R. Kahn 1.9 - 1.4 1.9 700 - 850 L. Terry 0.6 - 0.35. 1.8

我有一个数据集,其中的线条类似:

G. Smith      2.2 - 1.6     1.0 - 1.5     33 - 55     660
F. John       1.4 - 0.2.                  60          850 (early) - 1100 (late)
R. Kahn       1.9 - 1.4     1.9                       700 - 850
L. Terry      0.6 - 0.35.   1.8.          60          1100 - 1400
我想得到最后一列的平均值。对于由破折号分隔的数字,我想把它们看作是它们自己的平均值(例如,当计算列的总体平均值时,700—850将被计算为其平均值,775)< /P> 到目前为止,我的方法是分割行,然后在每次循环行时平均最后一个索引的值。但是,我只能让它分割每个值,使连字符的数字变成两个不同的值,或者让它看起来像是完美的分割,但是这些值没有用逗号分隔,因此我无法访问行中的特定值。以下是我以第二行输出为例所做的尝试(请注意,我甚至没有尝试包括平均值计算,因为我无法正确分割该行):

返回:

['F. John', '1.4', '0.2', '60', '850 (early', '1100 (late)\n']
 ['F. John           1.4 - 0.2                    60          850 (early) - 1100 (late)\n']
而且

with open('file.txt', 'r') as f:
    l = f.readline()
    while l:
        current_line = re.split('^-\W\W\W+', l)
        print(current_line)
        l = f.readline()
返回:

['F. John', '1.4', '0.2', '60', '850 (early', '1100 (late)\n']
 ['F. John           1.4 - 0.2                    60          850 (early) - 1100 (late)\n']
第二个结果更可取,因为它将虚线值保持在一起,但是您可以看到,所有值都分组在一起,而不是用列分隔

预期结果:

 ['F. John', '1.4 - 0.2', '60', '850 (early) - 1100 (late)\n']
还有一行括号中的“早/晚”问题。我甚至还没有开始考虑如何避开这个问题,所以我也希望能得到一些建议

还有,有没有办法让它识别空格?我这样问是因为稍后我还需要得到第3列的最大值。我现在的想法是,如果我尝试访问第二行每行的索引2(第三列的值应该在那里),我将读取第四列的值,因为第三列缺少该值,并且在列表中它只是继续到下一个值,而不为空字段设置占位符

如果这是可能的,则第二行的预期结果将如下所示:

['F. John', '1.4 - 0.2', ' ', '60', '850 (early) - 1100 (late)\n']
甚至可能:

['F. John', '1.4 - 0.2', NULL, '60', '850 (early) - 1100 (late)\n']
这可能适合您:
re.split('\s\s+',第行)

我想得到最后一列的平均值

获取最后一列的关键是这样一个好的

^(.*)(\d+[A-Za-z0-9()]*-\d+[A-Za-z0-9()]*.\d+-\d+$
最后一列=重新拆分(\s{2,}),l)[-1]#例如“850(早期)-1100(晚期)”或“600” patt=re.compile(“(?P[0-9]+)[a-zA-z(\)\-]+(?P[0-9]+)”) g=部分搜索(最后一列) 如果g: val=(int(g.group('num1'))+int(g.group('num2'))/2 其他: val=int(最后一列) `