使用python从文本文件中提取行

时间:2017-02-18 07:35:06

标签: python

我有超过100个.out文件,这些文件是来自名为MPlus的统计软件的输出文件。在每个文件中(可以使用任何文本编辑器打开),在几百行文本中,有几行我感兴趣。这些行看起来像这些 - >

 I        ON
    K1                -0.247      0.321     -0.769      0.442
    K2                 0.161      0.232      0.696      0.486

 S        ON
    K1                 0.035      0.143      0.247      0.805
    K2                -0.123      0.154     -0.799      0.424

 Q        ON
    K1                 0.083      0.325      0.255      0.798
    K2                 0.039      0.229      0.169      0.866

 I        ON
    LABTOTF1           0.014      0.018      0.787      0.431
    LABTOTG2           0.011      0.017      0.626      0.532
    UGLABTOT           0.001      0.004      0.272      0.786
    UMLABTOT           0.098      0.147      0.664      0.507

 S        ON
    LABTOTF1          -0.008      0.019     -0.406      0.684
    LABTOTF2           0.000      0.013     -0.018      0.986
    UGLABTOT          -0.001      0.003     -0.209      0.835
    UMLABTOT          -0.063      0.115     -0.548      0.584

 Q        ON
    LABTOTF1          -0.013      0.025     -0.532      0.595
    LABTOTF2          -0.014      0.023     -0.596      0.551
    UGLABTOT           0.007      0.006      1.131      0.258
    UMLABTOT          -0.489      0.171     -2.859      0.004

数字不断变化,变量(K1,K2,LABTOTF1等)和变量数量不断变化。但I ONS ONQ ON存在于所有文件中。

我想从这些输出文件中提取这些行,并使用python脚本将它们放入单个输出文件中。

到目前为止,我的方法还包括编写嵌套for循环,因为每个文件中的行数不断变化,所以它既不高效也不有效。

我第一次尝试获取行I ON和值(K1 & K2)的可怕“测试”使用以下代码行:

file = open("./my_folder/my_file.out","r")
lines = [line for line in file]
file.close()
collector = []
for i in range(0,len(lines)):
    if lines[i] == '\n':
        continue
    elif "I        ON\n" in lines[i]:
        collector.append(lines[i])
        collector.append(lines[i+1])
        collector.append(lines[i+2])
        i += 4
        continue

从文本文件中提取这些行的最有效和pythonic方法是什么?

编辑:我感兴趣的行是'标题'以及包含变量+值的行。例如。如果我想要I ON部分,我想从上一个示例中提取以下几行:

I        ON
    K1                -0.247      0.321     -0.769      0.442
    K2                 0.161      0.232      0.696      0.486

2 个答案:

答案 0 :(得分:0)

假设这是文件结构:

out_lines = []
for line in lines:
    if len(line.strip().split()) == 2:
        out_lines.append(line)

答案 1 :(得分:0)

如果要搜索确切的键结构,可以使用正则表达式。以下代码仅适用于一个' .out'为上面的测试数据的每个标题类型生成一个文件并生成一个文件。

FilesystemResourceLoader