2016-12-06 135 views
0

我有一個參數是變量爲搜索功能的問題。如何將字符串變量傳遞給搜索功能?

這是我想要實現的:
我有一個文件充滿了值,我想檢查文件以確保在我繼續之前存在特定的匹配行。我要確保,如果一個有效<begSW=UNIQUE-DNS-NAME-HERE<>存在並且可達行<endSW=UNIQUE-DNS-NAME-HERE<>存在。直到我打電話if searchForString(searchString,fileLoc):它總是返回false

,一切工作正常。如果我給你變「搜索字符串」的直接價值,並將它傳遞它的作品,所以我知道它一定有什麼用,我結合串的方式,但我似乎無法找出什麼我做錯了。

如果我檢查的數據「searchForString」使用我看到了似乎是有效值:

values in fileLines list: 

['<begSW=UNIQUE-DNS-NAME-HERE<>', ' <begPortType=UNIQUE-PORT-HERE<>', '  <portNumbers=80,443,22<>', ' <endPortType=UNIQUE-PORT-HERE<>', '<endSW=UNIQUE-DNS-NAME-HERE<>'] 

value of searchVar: 

<endSW=UNIQUE-DNS-NAME-HERE<> 

文件中的條目的例子是:

<begSW=UNIQUE-DNS-NAME-HERE<> 
    <begPortType=UNIQUE-PORT-HERE<> 
     <portNumbers=80,443,22<> 
    <endPortType=UNIQUE-PORT-HERE<> 
<endSW=UNIQUE-DNS-NAME-HERE<> 

這裏是代碼有問題:

def searchForString(searchVar,readFile): 
    with open(readFile) as findMe: 
     fileLines = findMe.read().splitlines() 
     print fileLines 
     print searchVar 
     if searchVar in fileLines: 
      return True 
     return False 
    findMe.close() 

fileLoc = '/dir/folder/file' 
fileLoc.lstrip() 
fileLoc.rstrip() 
with open(fileLoc,'r') as switchFile: 
    for line in switchFile: 
     #declare all the vars we need 
     lineDelimiter = '#' 
     endLine = '<>\n' 
     begSWLine= '<begSW=' 
     endSWLine = '<endSW=' 
     begPortType = '<begPortType=' 
     endPortType = '<endPortType=' 
     portNumList = '<portNumbers=' 
     #skip over commented lines -(REMOVE THIS) 
     if line.startswith(lineDelimiter): 
      pass 
     #checks the file for a valid switch name 
     #checks to see if the host is up and reachable 
     #checks to see if there is a file input is valid 
     if line.startswith(begSWLine): 
      #extract switch name from file 
      switchName = line[7:-3] 
      #check to make sure switch is up 
      if pingCheck(switchName): 
       print 'Ping success. Host is reachable.' 
       searchString = endSWLine+switchName+'<>' 
       **#THIS PART IS SUCKING, WORKS WITH DIRECT STRING PASS 
       #WONT WORK WITH A VARIABLE** 
       if searchForString(searchString,fileLoc): 
        print 'found!' 
       else: 
        print 'not found' 

任何建議或指導將是非常有益的。

+0

做一些更多的閱讀之後,我已經決定要輸入的文本文件更改爲XML並使用內置在庫中。 –

回答

0

很難說沒有文件的內容,但我會嘗試

switchName = line[7:-2] 

所以這看起來像

>>> '<begSW=UNIQUE-DNS-NAME-HERE<>'[7:-2] 
'UNIQUE-DNS-NAME-HERE' 

此外,你可以看看正則表達式搜索,使您的清理更加靈活。

import re 
# re.findall(search_expression, string_to_search) 

>>> re.findall('\=(.+)(?:\<)', '<begSW=UNIQUE-DNS-NAME-HERE<>')[0] 
'UNIQUE-DNS-NAME-HERE' 

>>> e.findall('\=(.+)(?:\<)', '  <portNumbers=80,443,22<>')[0] 
'80,443,22' 
+0

下面是該文件的內容的一個例子:

+0

確保您得到一個數組一樣 <'begSW = US-CA-SD-190IN4-BA01 <>', '', ', '', ''] 沒有這個, 「在switchFile中的行」將不起作用 – Neil

相關問題