2016-07-26 6 views
0

私は、テキストファイルから行を抽出する際に大きな問題を抱えている: 次のように構築された私のテキストファイルイスト:エキス特定の行(PYTHON)

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 

....

テキストファイルには約1000個の "BO_"ブロックが含まれています...

"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("\n") 
     show_line= False 
    if show_line and not line.startswith("BO_ 560") 
     print line 

私は次の出力を期待したいと思います:

 SG_1_ Vr 
    SG_2_ Vr_set 
    SG_3 Dars 

誰も私を助けることができますか?

+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 _

を見るときは、私はあなたが最初のブロックまたはすべてのために必要な場合を確認していないラインの更なる処理をスキップする必要があります。

以下のオプションで問題を解決できますか?

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

何が欲しいの出力に「BOの」あなたはこのような何かを行うことができます間のすべてのブロックである場合:

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

の間の表現をしたいだけです、私はアルゴリズムに文字列を与えたいと思います。例えば: "BO_560"。アルゴリズムは私に "SG_"で始まる文章を与えるはずです....しかし、次の "BO_"までの式だけ... –