2011-11-14 9 views
2

特定のIPアドレスを検索するテキストファイルがあります。テキストファイルの設定方法は、ホスト名がip addの上にあることです。 iepythonで検索値の上に行を取得する

real HOSTNAME 

address xx.xx.xx.xx 

私が検索するIPアドレスだけを取得したときにホスト名を取得する最良の方法は何ですか?正規表現ですか?保留スペースを持つpythonのようなsedのようなユーティリティはありますか?任意の助けを感謝していただきありがとうございます

答えて

1

あなたは、ホスト名がIPの前にある行数を知っているならば、あなたは、行のリストを列挙し、現在のインデックスから行の必要な数を引くことができは:

lines = open("someFile", "r").read().splitlines() 
IP = "10.10.1.10" 
hostname = None 
for i, line in enumerate(lines): 
    if IP in line: 
     hostname = lines[i - 1] 
     break 

if hostname: 
    # Do stuff 
2

正規表現はおそらく最も簡単な解決策です。あなたはまた、linecache moduleを使用するか、単にf.readlines()を使用して、リストにすべての行を読み込むことができ

>>> textdata = ''' 
someline 
another line 
real HOSTNAME 

address 127.0.0.1 
post 1 
post 2 
''' 
>>> re.findall('^(.*)$\n^.*$\naddress 127.0.0.1', textdata, re.MULTILINE) 
['real HOSTNAME'] 

2

このそうでないかもしれない最善の解決策が、あなたはキャッチするn個あなたのターゲットライン上のライン両端キューを使用することができます

from collections import deque 
from itertools import takewhile 

test = """ 
real others 

address xxx.xxx.xxx 

real local 

address 127.0.0.1 

real others 

address xxx.xxx.xxx 
""".split("\n") 

pattern = "address 127.0.0.1" 
print deque(takewhile(lambda x:x.strip()!=pattern, test), 2)[0] 

変更ファイルにテスト変数(「yourfilename」)は、あなたのテキストファイルから行を読み取るために。

+0

* * maxlenをニース使用引数:-) –

関連する問題