string.find()aways evaluate to true

时间:2012-03-29 19:59:35

标签: python-3.x

我有一个读取文件的小脚本。在读完一行后,我试图弄清楚特定的行中有特定的文本。因为我喜欢这个

for line in file:
    line = line.lower()

    if line.find('my string'):
        print ('found my string in the file')

读取line.find aways评估为true的文件。我什么时候喜欢

for line in file:
    line = line.lower()

    if 'one big line'.find('my string'):
        print ('found my string in the file')

它评估为假,正如它想做的那样。因为我对python编程很新,只是因为我已经展示了我只是想不出我可能会寻找...

2 个答案:

答案 0 :(得分:6)

find返回一个数字,它是搜索字符串中出现的字符串的位置。如果找不到,则返回-1。并且python中不是0的每个数字都计算为True。这就是为什么您的代码总是评估为True

您需要以下内容:

if 'one big line'.find('my string') >= 0:
    print ('found my string in the file')

或者,更好:

idx = 'one big line'.find('my string')
if idx >= 0:
    print ("found 'my string' in position %d" % (idx))

答案 1 :(得分:2)

将这个写成:

是更好的惯用python
for line in file:
    line = line.lower()

    if 'my string' in line:
        print ('found my string in the file')
如果你不关心字符串中的位置,那么

而不是使用.find()