2011-11-14 36 views
2

我有一個文本文件,我想要搜索特定的IP地址,並且文本文件的設置方式是主機名稱位於ip add之上。即在Python中獲取搜索值以上的行

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

正則表達式可能是最簡單的解決方案。

>>> 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'] 

您也可以使用linecache module或簡單地讀取所有的線用成一個f.readlines()名單。

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的*參數:-) –

相關問題