2012-03-29 6 views
3

У меня есть небольшой скрипт, который читает файл. После прочтения строки я пытаюсь понять, что конкретная строка имеет в ней специальный текст. Для этого мне это нравитсяstring.find() aways оценивает true

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 только для того, что я показал, я просто не могу думать о том, что я мог бы искать ...

ответ

1

Это лучше идиоматических питон, чтобы написать это как:

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

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

, а не с помощью .find() если вы не Не заботьтесь о позиции внутри строки.

+0

спасибо, это то, что я искал ... –

5

find возвращает число, в котором находится встречающаяся строка внутри строки поиска. Если он не находит его, он возвращает -1. И каждый номер, который не является 0 в python, оценивается в 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)) 
Смежные вопросы