Строковая эквивалентность / сравнение в Python - PullRequest
1 голос
/ 17 декабря 2011

Я не могу сравнить строки правильно в Python, как правильно сравнить его в условии if?

Testfile = "test.txt"
with open(TestFile) as testSet:
    line = testSet.read().rstrip('\n')
    if "#*#*# ham" or "#*#*# spam" in line: 
        print line

Мой test.txt примерно так выглядит:

#*#*# ham
foo bar bar foo bar bar bar bar
#*#*# ham
foo bar bar foo bar foo bar foo foo bar bar
#*#*# spam
foo bar foo foo bar barfoo bar foo foo bar bar
#*#*# spam
foo bar foo foo bar bar  foo foo bar bar
#*#*# ham
foo bar foo foo
#*#*# spam
foo bar foo foo bar bar  foo foo bar bar
#*#*# spam
bar foo bar foo foo bar 
#*#*# spam
bar bar foo foo

Ответы [ 3 ]

4 голосов
/ 17 декабря 2011

Делай:

Testfile = "test.txt"
with open(TestFile) as testSet:
    for line in testSet:
        line = line.strip() 
        if "#*#*# ham" in line or "#*#*# spam" in line: 
            print line

вместо того, что ты делаешь.Вы читаете весь файл в строковую переменную, как ваш код.

2 голосов
/ 17 декабря 2011

Это читается как:

if ("#*#*# ham") or ("#*#*# spam" in line):

И строка приводится к истине.

Попробуйте:

if "#*#*# ham" in line or "#*#*# spam" in line:
0 голосов
/ 17 декабря 2011

Что следует читать:

testfile = "test.txt"
with open(testFile) as f:
    for line in f:
        line = line.rstrip()
        if "#*#*# ham" in line or "#*#*# spam" in line: 
            print line

Еще одна приятная форма:

if any(substr in line for substr in (#*#*# ham", "#*#*# spam")):
    print line
...