的Python 3.6.0分裂()上的一個字符或另一
我有解析來自Cisco交換機和路由器輸出的程序。
我得到的程序中,我從'sh ip int brief' 命令返回輸出的一個點。
我把它放在一個列表中,所以我可以拆分'>'字符並提取主機名。
它完美的作品。相關的代碼片斷:
ssh_channel.send("show ip int brief | exc down" + "\n")
# ssh_channel.send("show ip int brief" + "\n")
time.sleep(0.6)
outp = ssh_channel.recv(5000)
mystring = outp.decode("utf-8")
ipbrieflist = mystring.splitlines()
hostnamelist = ipbrieflist[1].split('>')
hostname = hostnamelist[0]
如果路由器是「啓用」模式的命令提示具有主機名之後的「#」字符。
如果我改變我的程序分裂的「#」字符:
hostnamelist = ipbrieflist[1].split('#')
它仍然完美。
我需要程序處理輸出是否具有'>'字符或'ipbrieflist'中的'#'字符。
我發現了幾個有效的參考文獻來說明如何處理這個問題。例如:
import re
text = 'The quick brown\nfox jumps*over the lazy dog.'
print(re.split('; |, |\*|\n',text))
上面的代碼完美地工作。
然而,當我修改我的代碼如下:
hostnamelist = ipbrieflist[1].split('> |#')
它不工作。由'不行'我的意思是它不分裂任何一個字符。根本沒有分裂。
以下調試是從PyCharm:
ipbrieflist = mystring.splitlines()ipbrieflist = {}列表:[ '末端長度爲0',「RTR-1841>顯示IP INT簡要|刪除','接口'] IP地址好嗎?方法狀態協議','FastEthernet0/1 192.168.1.204是NVRAM up up','Loopback0 172.17.0.1 YES NVRAM up up','','rtr-1841>'] hostnamelist = ipbrieflist [1] .split(' > |#')hostnamelist = {list}:['rtr-1841> show ip int brief | exc down'] hostname = {str}'rtr-1841> show ip int brief |刪除'
正如你所看到的,hostname變量仍然包含'show ip int brief |刪除「附加到它。
如果主機名後跟'#'字符,我會得到相同的確切行爲。
我在做什麼錯?
謝謝。
呃,'re.split' ='str.split'。 –