繁体   English   中英

使用Python从文本表中提取数据

[英]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 :

  • 在 output 文件中搜索关键字“BREAKDOWN”
  • 读取“BREAKDOWN”和下一个关键字“RELATIVE”之间的数据
  • 仅提取数据,而不是标题。

我实际上只需要第一列中的数据(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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM