我在将字符串变量传递给搜索函数时遇到问题。
这是我想要完成的事情:
我有一个充满值的文件,我想检查文件以确保在继续之前存在特定的匹配行。如果有效<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'
任何建议或指导都会非常有帮助。
答案 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文件。