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

问题描述 投票:0回答:1

我有一个类似行的数据集:

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

我正在尝试获取最后一列的平均值。对于用破折号分隔的数字,我想将其视为自己的平均值(例如,在计算列的总体平均值时,将其视为平均值775-775)

到目前为止,我的方法是分割线,然后每当我循环通过一条线时,将最后一个索引处的值取平均值。但是,我只能用它来分割每个值,使连字符的数字成为2个不同的值,或者使它看起来像完全分割后的值,但是这些值没有用逗号分隔,因此我无法访问该行中的特定值。这里以第二行输出为例进行了尝试(请注意,由于我无法正确分割行,因此我什至没有尝试包括平均计算):

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

和...

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

还有其中一行的括号中的“早/晚”问题。我什至还没有开始考虑如何解决这个问题,因此对此的提示也将不胜感激。

而且,有没有一种方法可以识别空白?我问这个是因为稍后我还必须获得第三列的最大值。我现在想的方式是,如果我尝试访问第二行上每一行的索引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']
python split delimiter
1个回答
0
投票

这可能对您有用:re.split('\s\s+', line)

© www.soinside.com 2019 - 2024. All rights reserved.