我从HP设备获取信息并将其存储在名为data
的变量中。
现在,我想从输出中仅提取Chassis:
和Serial Number:
的值,其示例如下(我通过键入命令show module
获得它):< / p>
============================
coaza077-cor-01> show module
Status and Counters - Module Information
Chassis: 2900-24G J9049A Serial Number: SG748KI09F
Slot Module Description Serial Number
----- ---------------------------------------- --------------
coaza077-cor-01> exit
Do you want to log out [y/n]? y
=============================
以下代码是我尝试这样做的:
sList = os.linesep.join([s for s in data.splitlines() if s])
for i in range(0,len(sList)):
if (sList[i].lower()).find('Chassis') >= 0:
#DEVICE PROCESSOR
device_processor= _parse.getdata(sList[i].lower(), 'Chassis:', ' ')
if debugging == "_HP2900" or debugging == "ALL": print "_HP2900.py", "Processor", device_processor
if (sList[i].lower()).find('Serial Number') >= 0:
print 'Serial Number'
#DEVICE SERIAL NUMBER
device_serial= (_parse.serial_number(sList[i].lower()[len('Serial Number'):])).upper()
if debugging == "_HP2900" or debugging == "ALL": print "_HP2900.py", "Serial", device_serial
..但是我似乎无法获得我需要的两个值。我是Python的新手,并且不确定我是否正确地解决了这个问题。
如何才能获得我需要的字段?
答案 0 :(得分:7)
>>> data = """
============================
coaza077-cor-01> show module
Status and Counters - Module Information
Chassis: 2900-24G J9049A Serial Number: SG748KI09F
Slot Module Description Serial Number
----- ---------------------------------------- --------------
coaza077-cor-01> exit
Do you want to log out [y/n]? y
=============================
"""
>>> chasis = data.split('Chassis:')[1].split('Serial')[0].strip()
>>> serial = data.split('Serial Number:')[1].split()[0].strip()
>>>
>>> print chasis
2900-24G J9049A
>>> print serial
SG748KI09F
评论更新:
>>> x, y = chasis.split()
>>> print x
2900-24G
>>> print y
J9049A
答案 1 :(得分:1)
前几件事。
为什么首先将数据拆分成行然后将它们连接成字符串?你的迭代遍历每个符号,而不是每个字母。
什么是_parse?如果您需要帮助,请粘贴所有需要的代码。
sList[i].lower()).find('Chassis')
你想如何在全部降低的文本中找到“Chasis”这个词?请记住,该发现并非独立于案例。
更多pythonic:
for line in data.splitlines():
if "Chassis" in line:
print line
#DEVICE PROCESSOR
#device_processor= _parse.getdata(sList[i].lower(), 'Chassis:', ' ')
#if debugging == "_HP2900" or debugging == "ALL": print "_HP2900.py", "Processor", device_processor
if 'Serial Number' in line:
print line
#DEVICE SERIAL NUMBER
#device_serial= (_parse.serial_number(sList[i].lower()[len('Serial Number'):])).upper()
#if debugging == "_HP2900" or debugging == "ALL": print "_HP2900.py", "Serial", device_serial
数据就是你的所有文字。尝试阅读更多关于pythonic方法的内容,让您的生活更轻松;)
脚本现在所做的是找到正确的行。当你写_parse
时,我可以在这个答案中添加更多内容。
答案 2 :(得分:1)
由于您首先将当前行更新为小写,然后尝试查找混合大写/小写的字符串,因此无效。所以你需要的就是删除.lower()。
试试这个:
for row in (line.strip() for line in data.split('\n') if line.strip()):
rData = row.split() # just for sample
if 'Chassis' in row:
#DEVICE PROCESSOR
chassisInd = rData.index('Chassis:')
if chassisInd + 1 < len(rData):
print 'Chassis:', rData[chassisInd + 1]
if 'Serial Number' in row:
serialInd = rData.index('Serial Number:')
if serialInd + 1 < len(rData):
print 'Serial Number:', rData[serialInd + 1]