我有超過100個.out文件,這些文件是來自統計軟件MPlus的輸出文件。在每個文件(可以用任何文本編輯器打開),從幾百行文字中,有一對夫婦,我很感興趣線的線條看起來像這些 - >使用python從文本文件中提取行
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 ON
,S ON
,Q 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
什麼是提取這些線的最有效和最Python的方式一個文本文件?
編輯:我感興趣的行是'標題'以及包含變量+值的行。例如。如果我想的I ON
部分,我想從前面的例子中拉下面幾行:
I ON
K1 -0.247 0.321 -0.769 0.442
K2 0.161 0.232 0.696 0.486
對不起,看起來我不清楚我的問題。更新它以顯示我有興趣拉什麼線。 –
你可以很容易地擴展我的例子。只需將每行添加到'out_lines',並且如果第二行('if len(line.strip()。split())== 2')的條件爲真,則「flush」該行列表並開始新的一個。 –
嗨Shachar,不會工作的原因是因爲缺乏特異性。如果文本中有另一行只有兩個單詞,那麼它也會附加到輸出變量中。 –