[英]Using Python to extract data from text table
我有一个输出大数据文件的程序。 我想提取数据的特定部分,如下所示:
BREAKDOWN BY GROUP
GROUP DECAY CONST (S**-1) FRACTION REL FRACTION
1 0.012467 61.02546E-06 0.01756
2 0.028292 605.84209E-06 0.17430
3 0.042524 194.54899E-06 0.05597
4 0.133042 549.34727E-06 0.15805
5 0.292467 1.03141E-03 0.29673
6 0.666488 490.61031E-06 0.14115
7 1.634781 353.35857E-06 0.10166
8 3.554600 189.75023E-06 0.05459
RELATIVE FRACTION
我想写一个 function :
我实际上只需要第一列中的数据(DECAY CONST),但我认为在这个阶段阅读全部内容然后只使用第一列而不是尝试忽略其他数据会更容易。
我已将这两个关键字定义为 start_identifier 和 end_identifier,因为我希望能够将此代码重用于其他类似目的。 到目前为止,这就是我所拥有的:
def read_data_from_file(file_name, start_identifier, end_identifier):
list_of_results = []
with open(file_name) as f:
t=f.read()
t=t[t.find(start_identifier):]
t=t[t.find(start_identifier):t.find(end_identifier)]
t=t.replace('\n', '').split()
t=[float(i) for i in t if not i.isidentifier()]
list_of_results.extend(t)
return(list_of_results)
非常感谢任何帮助!
只是玩,但这是一种方法:
from io import StringIO
data = '''\
BREAKDOWN BY GROUP
GROUP DECAY CONST (S**-1) FRACTION REL FRACTION
1 0.012467 61.02546E-06 0.01756
2 0.028292 605.84209E-06 0.17430
3 0.042524 194.54899E-06 0.05597
4 0.133042 549.34727E-06 0.15805
5 0.292467 1.03141E-03 0.29673
6 0.666488 490.61031E-06 0.14115
7 1.634781 353.35857E-06 0.10166
8 3.554600 189.75023E-06 0.05459
RELATIVE FRACTION
'''
f = StringIO(data)
START, STOP = 'BREAKDOWN', 'RELATIVE'
SLICES = [
slice(0, 8),
slice(8, 31),
slice(31, 46),
slice(46, 65),
]
begin = False
lines = []
for line in f:
if line.startswith(START):
begin = True
continue
if line.startswith(STOP):
begin = False
continue
if begin:
if not line.strip():
continue
lines.append(line)
values = []
for line in lines[1:]:
values.append([float(line[s].strip()) for s in SLICES])
columns = list(zip(*values))
print(columns[1])
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.