2011-08-29 29 views
-8

我從HP設備獲取信息並將其存儲在名爲data的變量中。現在在Python中查找並只提取所需的信息

,我想從輸出,其中一個例子下面是Chassis:Serial Number:僅提取的值(I通過鍵入命令show module獲得它):

============================ 
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很陌生,不確定我是否正確地處理了這個問題。

我怎樣才能得到我需要的領域?

+1

什麼是不工作?你有錯誤嗎?或者結果不是你所期望的? – Cristina

回答

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 
+0

嗨,它工作。謝謝..在分析:2900-24G J9049A我想打破這個和存儲在2 vriables分類:2900-24G和號碼J9049A。怎麼辦.. –

+0

我是新來的蟒蛇..謝謝develerx ..真棒..保重 –

1

第一件事。

爲什麼你首先將數據拆分成行,然後將它們連接成字符串?你的迭代遍歷每個符號,而不是每個字母。

什麼是_parse?如果你需要幫助,請粘貼所有需要的代碼。

sList[i].lower()).find('Chassis')如何在全部降低的文本中找到單詞「Chasis」?請記住,這個發現並不是獨立的。

小更Python:

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是,我可以添加更多的東西給這個答案。

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]