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



我有一个数据集,其中行类似于:

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(

到目前为止,我的方法是拆分线,然后在每次循环通过一条线时平均最后一个索引的值。但是,我只能让它拆分每个值,使带连字符的数字成为 2 个不同的值,或者让它看起来像是完美拆分,但值没有用逗号分隔,所以我无法访问行中的特定值。这是我以第二行输出为例尝试的内容(请注意,我什至没有尝试包含平均计算,因为我无法正确拆分行(:

with open('file.txt', 'r') as f:
l = f.readline()
while l:
current_line = re.split('WWW+', 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('^-WWW+', 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']

其中一行的括号中还有"早/晚"的问题。我什至还没有开始考虑如何解决这个问题,所以这方面的提示也将不胜感激。

另外,有没有办法让它识别空格?我问这个是因为稍后我还必须获得第 3 列的最大值。我现在的想法是,如果我尝试访问第 2 行上每行的索引 2(第 3 列的值应该在哪里(,我将读取第 4 列的值,因为第 3 列缺少该值,并且在列表中它只是继续到下一个值,而不会为空字段制作占位符。

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

['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']
last_col = re.split("s{2,}", l)[-1] # eg '850 (early) - 1100 (late)' or '600'
patt = re.compile("(?P<num1>[0-9]+)[a-zA-z()- ]+(?P<num2>[0-9]+)")
g = patt.search(last_col)
if g:
val = (int(g.group('num1')) + int(g.group('num2'))) / 2
else:
val = int(last_col)

'

这可能对你有用:re.split('ss+', line)

我正在尝试获取最后一列的平均值。

获取最后一列的关键可能是一个不错的正则表达式,例如

^(.*) (d+ [A-Za-z0-9()]* - d+ [A-Za-z0-9()]*|d+ - d+)$

相关内容

最新更新