Python Fabric无法在字符串中找到子字符串

时间:2016-03-20 15:55:19

标签: python string find substring fabric

我有2个相同长度的列表。一个包含我想要找到的子字符串,一个包含我试图找到子字符串的较长字符串(它总是在行的开头)。我有的列表包含一个子字符串不在字符串中的条目;第二个条目在字符串中有子字符串。

然而,看起来python无法弄清楚子串是否存在。我尝试了很多不同的方法。

if substring in string
if string.find(substring) != -1
if string.startswith(substring) != -1

前两个“如果”  上面的陈述总是返回false。最后一个“if”语句始终返回true。

def agentID():
index = 1
while index < 3:
    ID = linecache.getline('/home/me/project/ID', index)
    agentLine = linecache.getline('/home/me/project/agentIDoutput', index)
    str(agentLine)
    if agentLine.startswith('%s' % str(ID)) != -1:
        print("%s: Proper Agent ID %s found in client.keys" % (env.host_string, ID))
        index = index + 1
    else:
        print("I couldn't find %s in the line %s" % (ID, agentLine))
        index = index + 1 

这看起来非常简单明了。我甚至尝试显式转换为字符串,以确保我搜索相同的类型。这就是我在想我的错误,但似乎把它们都解释为字符串。

2 个答案:

答案 0 :(得分:0)

string.startswith()会返回TrueFalse,它们实际上分别是整数值10

因此,if string.startswith(substring) != -1始终为True

显然,您的子字符串根本不存在于您的字符串中。

答案 1 :(得分:0)

print是你的朋友。我试过一个快速测试:

>>> import linecache
>>> print(repr(linecache.getline('tmp/testfile.txt', 1)))
'line 1\n'

linecache为您提供包括换行符在内的完整行。把它从最后剥​​离。当我在这里时,你还清理了其他一些问题

def agentID():
    for index in range(1,4):
        ID = linecache.getline('/home/me/project/ID', index).strip()
        agentLine = linecache.getline('/home/me/project/agentIDoutput', index)
        if agentLine.startswith(ID):
            print("%s: Proper Agent ID %s found in client.keys" % (env.host_string, ID))
        else:
            print("I couldn't find %s in the line %s" % (ID, agentLine))