2017-08-22 12 views
0

私はPython 3.6で書いていますが、私のコードを短いテキスト文書にマッチさせることに問題があります。そのようにフォーマットされたテキストドキュメントで文字列がテキストファイルであるかどうかを確認しています

PATH = "C:\\Users\\JoshLaptop\\PycharmProjects\\practice\\commented.txt" 

file = open(PATH, 'r') 

words = ['bah', 'dah', 'gah', "fah", 'mah'] 

print(file.read().splitlines()) 

if 'bah' not in file.read().splitlines(): 
    print("fail") 

:これは私の大きなプログラムを破壊され、正確なロジックの簡単な例である

bah 
gah 
fah 
dah 
mah 

、それが実際にプリントアウトされたが、私はこれを実行するたびに失敗します。テキスト文書からデータを読み込む間違った方法を使用していますか?

+2

あなたはすでにファイルを読み込んでいますので、2度目に '読み込み 'をすると、読み込める内容は残っていません。あなたの 'print'文を取り除くか、' file.seek(0) 'を使います。 –

+2

ファイルを閉じる前に、ファイルを複数回読み込んでいます。 'print'文の後に' file.seek(0) 'を追加するか、内容を変数に格納してください。 – Wondercricket

+0

' ''bah'がリストにない場合(file.readlines())' –

答えて

1

問題は、あなたが「grepを」あなたのパターンprint(file.read().splitlines())

ので、それはファイルを排出し、file.read().splitlines()次の呼び出しが空のリストを返します...

より良い方法を考え、印刷しているということです完全に読むのではなく、ファイル行を繰り返し処理する必要があります。ですから、早くファイル内の文字列を見つけた場合、あなたは時間を節約:

with open(PATH, 'r') as f: 
    for line in f: 
     if line.rstrip()=="bah": 
      break 
    else: 
     # else is reached when no break is called from the for loop: fail 
     print("fail") 

ここに小さなキャッチは、ファイル・ジェネレータは、行終端とラインを発行するのでline.rstrip()を呼び出すことを忘れることはありません。末尾のスペースがあなたのファイルであるかどうまた、このコードはまだ単語にマッチします(あなたが有力空白でさえ一致させたい場合は、それstrip()作る)

あなたは言葉の多くを一致させたい場合は、作成を検討行のset

lines = {line.rstrip() for line in f} 

ので、あなたのin lines呼び出しがたくさん速くなります。

0

ファイルを2回読むことはできません。

print(file.read().splitlines())を実行すると、ファイルが読み込まれ、ファイルの最後にあるため、この関数の次回の呼び出しでは何も返されません。

1

それを試してみてください。「)(file.read分割線()」

PATH = "C:\\Users\\JoshLaptop\\PycharmProjects\\practice\\commented.txt" 
file = open(PATH, 'r') 
words = file.read().splitlines() 
print(words) 
if 'bah' not in words: 
    print("fail") 
0
PATH = "your_file" 

file = open(PATH, 'r') 

words = ['bah', 'dah', 'gah', "fah", 'mah'] 

if 'bah' not in (file.read().splitlines()) : 
    print("fail") 

あなたは出力はあなたがいずれかを使用する必要があり「失敗」ではありません見ることができるように、コード内または別の変数に保存それ以外の場合は、 '失敗'メッセージが表示されます

関連する問題