if "calendar" or "Calendar" in rows:
これは常に真実です。"calendar"
長さがゼロでない文字列である場合、これは true であり、or
'd with"Calendar" in rows
は常に true です。実際、が true である"Calendar" in rows
ため、 が評価されることさえありません"calendar"
。
あなたがしたい:
if "calendar" in rows or "Calendar" in rows:
これは、実際にはrows
2 回検索するため、最も効率的ではありません。一度だけ検索するには、次を試してください。
if (row.lower() = "calendar" for row in rows):
ただし、これは実際には行を 2 回検索するよりも高速ではない可能性があります。1 つ目は明示的なループであるため、2 つ目はテスト前に各行を小文字にするためです。「calendar」や「Calendar」だけでなく、「CALENDAR」や「CALenDAR」など、あらゆるケースに一致するという利点があります。
さて、これはまだあなたが望むものではないかもしれないと感じています. 行の 1 つが正確に文字列でない限り"calendar"
(いずれにせよ)、これは常に false になります。たとえば、ファイルからリストを読み取った場合、行末が含まれている可能性があり、このテストが一致しなくなります。または、文字列に他のテキストが含まれている可能性があり、各行にその単語が含まれているかどうかをテストしたいだけです。この場合、次のように記述します。
if any("calendar" in row.lower() for row in rows):