2016-07-26 69 views
0

我在提取線條勾勒出一個文本文件中的一個大問題: 我的文本文件,內置IST類似如下:提取特定的線條勾勒出的文件(蟒蛇)的

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 

....

該文本文件包括這些「BO_」塊中的大約1000個...

我希望在「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") 

你想等待下一個「BO_」而不是EOL禁用show_line,試試這個:

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_」... –