我有一個文本文件,我想要搜索特定的IP地址,並且文本文件的設置方式是主機名稱位於ip add之上。即在Python中獲取搜索值以上的行
real HOSTNAME
address xx.xx.xx.xx
什麼是最好的/最簡單的方式去獲取主機名,當我只有IP地址搜索?常用表達? Python中是否有像sed一樣的實用程序?任何幫助表示讚賞謝謝
我有一個文本文件,我想要搜索特定的IP地址,並且文本文件的設置方式是主機名稱位於ip add之上。即在Python中獲取搜索值以上的行
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
正則表達式可能是最簡單的解決方案。
>>> 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()
名單。
這也許不是最好的解決辦法,但你可以使用雙端隊列趕上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的*參數:-) –