2017-12-29 34 views
2

次の行のテキストファイルを解析します。2番目のvarを自動的に作成する方法はありますか?

STP 11441 0 0 0 0

txtファイルで2件のなどのラインの発生が常にあります。私は行(ここでは11441)の2番目の値を探していて、それを変数として保存します。

私は、このような操作を1つの変数で行う方法を考え出しました。ここで は私が

import re 
with open('cpu.txt', 'r') as file: 
    for line in file: 
     match = re.search('stp    \d{2,100}', line) 
     if match: 
      stp_queue1 = match.group().split()[1] 

を使用していたコードであるしかし、私は私が二度目のマッチの発生のために(その場合のstp_queue2)で変数を指定する方法のまわりで私の頭を取得することはできません。すなわち

: ファイルは2次の行が含まれている場合:

stp 11441 0 0 0 0 
stp 20000 0 0 0 0 

を次にstp_queue1が11441であるべきであり、stp_queue2は、それぞれ20000であるべきです。

お手伝いできますか?

+2

あなたは絶対に正規表現を使用する必要がありますか?必要なのは、その最初の数値を取得することだけです。 – bla

答えて

1

独自の変数ではなく、辞書に値を追加できます。 dictionary["stp_queue1"]が最初に見つかった一致のために保存された値が返されたデータを抽出するために、キーが1

import re 
dictionary={} 
with open('cpu.txt', 'r') as file: 
    counter=1 
    for line in file: 
     match = re.search('stp    \d{2,100}', line) 
     if match: 
      dictionary["stp_queue"+str(counter)] = match.group().split()[1] 
      counter++ 
print dictionary 

から始まる番号をstp_queue#ことで辞書にそれぞれ一致を追加するための以下のコードを参照してください。ここで辞書に

の詳細:あなたがリストに入れている場合https://docs.python.org/2/tutorial/datastructures.html#dictionaries

+0

ありがとうございました!魅力として働く! – AlexCCIE

+0

あなたはチャンスを得るときに先に進み、その答えを受け入れるべきです:) –

1

順序は保持され、調べているあなたの正規表現で使用groupsように簡単

stp_queue[0]として
import re 
stp_queue = [] 
with open('cpu.txt', 'r') as file: 
    for line in file: 
     match = re.search('stp    \d{2,100}', line) 
     if match: 
      stp_queue.append(match.group().split()[1]) 
-1

です。 Pythonの正規表現のドキュメントをお読みください

2

あなたはこの問題のために使用することができます多くのパターンがあります:あなたが望む、あなたが選ぶことができる

私は次の3つのパターンを示すAMは:

第一のパターン:

import re 

pattern=r'stp\s(\d+)' 

output=[] 
with open('file.txt','r') as f: 
    for line in f: 
     match=re.search(pattern,line) 
     output.append(match.group(1)) 

print(output) 

出力:

['11441', '20000'] 

パターン2:

r'[0-9]{5}' 

パターン3:

Positive Lookbehind (?<=stp\s) 

pattern=r'(?<=stp\s)\d+' 
0

あなたが必要とするすべては、その最初の番号を含むリストである場合stp次、これは十分かもしれ:

with open('cpu.txt', 'r') as f: 
    stp_queue = [line.split()[1] for line in f] 

print(stp_queue) 

あなたが行がstpで始まるかどうかを確認する必要がある場合は、単に理解にその検証を追加します。

with open('cpu.txt', 'r') as f: 
    stp_queue = [line.split()[1] for line in f if line.startswith('stp')] 

print(stp_queue) 
関連する問題