を含むファイルを読み取るとreadlines()
、結果のリスト要素には末尾の改行文字が含まれます。おそらく、これらが予想よりも一致数が少ない理由です。
書く代わりに
for x in list:
書きます
for x in (s.strip() for s in list):
これにより、の文字列から先頭と末尾の空白が削除されlist
ます。したがって、文字列から末尾の改行文字を削除します。
プログラムを統合するために、次のようなことを行うことができます。
with open('c:/tmp/textfile.TXT') as f:
haystack = f.read()
if not haystack:
sys.exit("Could not read haystack data :-(")
with open('c:/tmp/list.txt') as f:
for needle in (line.strip() for line in f):
if needle in haystack:
print(needle, ',one_sentence')
else:
print(needle, ',another_sentence')
あまり大幅な変更はしたくありませんでした。最も重要な違いは、ここでwith
ステートメントを介してコンテキストマネージャーを使用していることです。それはあなたのために適切なファイル処理(主に閉じる)を保証します。また、「needle」行は、ジェネレータ式を使用してオンザフライで削除されます。上記のアプローチでは、ファイル全体を一度にメモリにロードするのではなく、ニードルファイルを1行ずつ読み取って処理します。もちろん、これは大きなファイルの場合にのみ違いがあります。