저는 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 ON
, S ON
, Q ON
이 모든 파일에 있습니다.
이 출력 파일에서이 줄을 추출하여 파이썬 스크립트를 사용하여 단일 출력 파일에 던지려고합니다.
아직까지는, 내 메소드는 각 파일에서 행 수가 계속 변경되기 때문에 효율적이거나 효과적이지 않은 중첩 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
에서 이러한 라인을 추출하는 가장 효율적이고 파이썬 방법입니다 무엇을 텍스트 파일?
편집 : 내가 관심있는 라인은 '헤더'뿐만 아니라 변수 + 값을 포함하는 라인입니다. 예를 들면. 나는 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, 작동하지 않는 이유는 특이성이 부족하기 때문입니다. 텍스트에 두 단어 만있는 다른 줄이 있으면 출력 변수에도 추가됩니다. –