如何将字符串变量传递给搜索函数?

时间:2016-12-06 18:26:01

标签: python

我在将字符串变量传递给搜索函数时遇到问题。

这是我想要完成的事情:
我有一个充满值的文件,我想检查文件以确保在继续之前存在特定的匹配行。如果有效<endSW=UNIQUE-DNS-NAME-HERE<>存在且可以访问,我希望确保行<begSW=UNIQUE-DNS-NAME-HERE<>存在。

一切正常,直到我调用总是返回false的if searchForString(searchString,fileLoc):。如果我为变量'searchString'指定一个直接值并传递它就可以了,所以我知道它必须是我正在组合字符串的方式,但我似乎无法弄清楚我做错了什么。

如果我检查'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'   

任何建议或指导都会非常有帮助。

2 个答案:

答案 0 :(得分: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'

答案 1 :(得分:0)

我找到how to recursively iterate over XML tags in Python using ElementTree?并使用详细的方法来解析XML文件,而不是使用TXT文件。