2016-07-26 4 views
0

내가 텍스트 파일에서 줄을 추출에 큰 문제가 :추출물 특정 라인

BO_ 560 VR_Sgn_1: ALMN 
    SG_1_ Vr 
    SG_2_ Vr_set 
    SG_3 Dars 
BO _ 561 VSet_Current : ACM 
    SG_2_ Vr_set 
    SG_3 Dars 
BO_ 4321 CDSet_tr : APL 
    SG_1_ Vr 
    SG_2_ Vr_set 
    SG_3 Dars 
    SG_1_ Vr_1 
    SG_2_ Vr_set 
    SG_3 Dars 

....

: 내 텍스트 파일 IST는 다음과 같이 구축

텍스트 파일에 약 1000 개의 이러한 "BO_"블록이 포함되어 있습니다 ...

"BO_"사이에 표현식을 사용하고 싶습니다. 여기 내 이전 코드 :

 SG_1_ Vr 
    SG_2_ Vr_set 
    SG_3 Dars 

이 사람이 나를 도와 드릴까요 : 나는 다음과 같은 출력을 기대하고 싶습니다이 경우

show_line= False 
with open("test.txt") as f: 
    for line in f: 
    if line.startswith("BO_ 560"): 
     show_line=True 
    elif line.startswith("\n") 
     show_line= False 
    if show_line and not line.startswith("BO_ 560") 
     print line 

?

+1

잘 모르겠다. BO로 시작하지 않는 모든 라인을 원한다. 또는 을 제공하고 다음 BO_까지 BO_ 다음의 모든 행을 가져 오시겠습니까? 또한 지금받는 출력은 무엇입니까? –

+2

코드가 작동합니까? 그것이 효과가 없다면 무엇이 잘못 될까요? – khelwood

+0

"BO_ #NUMBER"로 시작하는 프레임이 있습니다. 내가 알고리즘을 문자열 "BO_ 560"을 전달 위의 이전의 예에서 다음과 같은 출력 예상 : 'SG_1_ VR SG_2_ Vr_set SG_3 Dars' 내 알고리즘은 항상 곁에 나에게주는이 : 'SG_1_ VR SG_2_ Vr_set 을 SG_3 DARS BO _ 561 VSet_Current : ACM SG_2_ Vr_set SG_3 DARS BO_ 4321 CDSet_tr : APL SG_1_ VR SG_2_ Vr_set SG_3 DARS SG_1_ VR_1 SG_2_ Vr_set SG_3 Dars' ....하지만 너무 많이합니다. 나는 단지 "BO_" –

답변

1

을 내가 문제가 함께 있다고 생각 :

elif line.startswith("\n") 

당신이 원하는 show_line을 사용하지 않으려면 다음 EOL 대신 "BO_"를 기다려야합니다.

show_line = False 
with open("test.txt") as f: 
    for line in f: 
     if line.startswith("BO_ 560"): 
      show_line = True 
     elif line.startswith("BO_"): 
      show_line = False 
     elif show_line: 
      print line 
+1

많은 감사합니다! 그건 내 실수 야! –

+0

당신은 환영합니다, 나는 그것이 작동했기 때문에 기뻐요 ... – petrs

+0

당신이 나에게 준 코드로 "BO_48"과 "BO_ 480"을 구별 할 수있는 방법을 알고 있습니까? –

0

당신은 당신은 내가 당신은 단지 첫 번째 블록 또는 전부에 대해 원하는 경우 확실하지 않다 BO_ or BO _

을 볼 때 라인의 추가 처리를 생략 할 필요가있다.

아래 옵션으로 문제가 해결됩니다. 당신이 원하는 것은 "BO의"사이의 출력 모든 블록에있는 경우

show_line = False 
    with open("test.txt") as f: 
     for line in f: 
      line = line.strip("\n") 
      if line.startswith("BO_ ") or line.startswith("BO _ "): 
       show_line = False if show_line else True 
       continue 
      if show_line: 
       print line 
0

당신은 이런 식으로 뭔가를 할 수 있습니다

with open("test.txt") as f: 
    for line in f: 
     if line.startswith("BO"): 
      print "" 
     else: 
      print line 
+0

사이의 표현식을 원한다. 나는 알고리즘에 문자열을주고 싶다. 예를 들면 : "BO_560". 그 알고리즘은 나에게 "SG_"와 함께 .beginning 이후에 문장을 제공해야합니다 ....하지만 다음 표현까지만 "BO_"... –