特定のIPアドレスを検索するテキストファイルがあります。テキストファイルの設定方法は、ホスト名がip addの上にあることです。 iepythonで検索値の上に行を取得する
real HOSTNAME
address xx.xx.xx.xx
私が検索するIPアドレスだけを取得したときにホスト名を取得する最良の方法は何ですか?正規表現ですか?保留スペースを持つpythonのようなsedのようなユーティリティはありますか?任意の助けを感謝していただきありがとうございます
特定のIPアドレスを検索するテキストファイルがあります。テキストファイルの設定方法は、ホスト名がip addの上にあることです。 iepythonで検索値の上に行を取得する
real HOSTNAME
address xx.xx.xx.xx
私が検索するIPアドレスだけを取得したときにホスト名を取得する最良の方法は何ですか?正規表現ですか?保留スペースを持つpythonのようなsedのようなユーティリティはありますか?任意の助けを感謝していただきありがとうございます
あなたは、ホスト名が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
正規表現はおそらく最も簡単な解決策です。あなたはまた、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']
。
このそうでないかもしれない最善の解決策が、あなたはキャッチする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」)は、あなたのテキストファイルから行を読み取るために。
* * maxlenをニース使用引数:-) –