2017-10-17 6 views
1

特定の行が見つかった後に特定の行を取り出しようとしています。以下は例です:Pythonは特定の行を見つけた後に行を読み込みます

1. ABC01 
2. AB_Name 
3. AC_Name 
4. ID_Name 
5. ABC02 
6. AB_Name 
7. ABB_Name 
8. AC_Name 
9. AQ_Name 
10. ID_Name 
11. ABC01 
12. AP_Name 
13. AZ_Name 
14. AB_Name 
15. ID_Name 

私が取るしようとしていますどのようなことはABC01後に行くと、それの後ABC02と行を無視everysingleラインです。だから私は探しています出力は、次のとおりです。

1. ABC01 
2. AB_Name 
3. AC_Name 
4. ID_Name 

11. ABC01 
12. AP_Name 
13. AZ_Name 
14. AB_Name 
15. ID_Name 

は、私のような文ならば試してみました:

lines = [line.rstrip('\n') for line in open('File.txt')] 

listings = [] 

for line in lines: 

    if line.startswith("ABC01"): 
     continue 
    if line.startswith("ID"): 
     break 

    listings.append(line.strip()) 

は、私は、Python 2.7

+0

なお、あなたが行を読み取るために、[分割線(https://docs.python.org/3.6/library/stdtypes.html#str.splitlines)メソッドを使用することができ( 'File.txt')。read()。splitlines() '(そして、[COLDSPEED](https://stackoverflow.com/users/4909087/c%e1%b4%8f%ca%9f%e1%を使用してくださいb4%85%e1%b4%98%e1%b4%87%e1%b4%87%e1%b4%85)の答え)。 –

答えて

1

を使用していますあなたがキャプチャしたいパターンを認識する必要があります(ABC01以降)、他のパターンが見つかるとキャプチャを停止します。 フラグでこれを行うことができます。パターンを見つけたらフラグを立て、次の行をキャプチャする必要があることを示します。 ABC02パターンが検出されたときに我々は偽にフラグを回す:

lines = ['ABC01', 'AB_Name', 'AC_Name', 'ID_Name', 
      'ABC02', 'AB_Name', 'ABB_Name', 'AC_Name', 
      'AQ_Name', 'ID_Name', 'ABC01', 'AP_Name', 
      'AZ_Name', 'AB_Name', 'ID_Name'] 

get_lines = False 
output = [] 

for line in lines: 
    if line.startswith('ABC01'): 
     get_lines = True 

    elif line.startswith('ABC02'): 
     get_lines = False 
     continue 

    if get_lines: 
     output.append(line) 
+0

は素晴らしく働いてくれてありがとう –

2

私はちょうど私が何を無視し、何取るのを追跡できますフラグを維持したいです。

ignore = False 

for line in lines: 
    if line.startswith("ABC01"): 
     ignore = False 
    elif line.startswith("ABC02"): 
     ignore = True 

    if not ignore: 
     listings.append(line.strip()) 
-1

私はPyhton ReactiveX拡張を使用してこの問題を攻撃する:

Observable.from_(lines).skip_while(lambda line: "ABC01" in line).filter(lambda line: not "ABC02" in line).subscribe(lambda line: print(line)) 

免責事項:https://github.com/ReactiveX/RxPY

はあなたがきちんとなどのRX演算子を使って1行でそれを解決することができ、コードテストされていません、しかし私はあなたが考えを持っていると思う! `行=オープン:

チャーリー

関連する問題