2016-10-05 10 views
0

これは私がやろうとしていることです。 データファイルの各行について、他のファイルにこの文字列が含まれているかどうかを確認してください。ファイルから別のファイルの内容を含む行を検索するPython

私は他の投稿からいくつかのものを試しましたが、そのうちのどれも良いものではありませんでした。

以下のコードは、ファイルのどこかに存在していたとしても、探していた文字列を見つけられませんでした。

あなたは文字列としてファイル全体を読み込み、その文字列の封じ込めを使用してチェックすることができ、最初のファイルの内容が極端に大きくはないと仮定すると、
def search(): 
    file1= open('/home/example/file1.txt', 'r') 
    datafile= open('/home/user/datafile.txt', 'r') 

    for line in datafile: 
     if line in file1: 
      print '%s found' % line 
     else: 
      print '%s not found' % line 

search() 
+1

はあなたが両方のファイルで同じ行を見つけようとしていますか? – haifzhan

+0

ファイルに '.read()'を追加するか、forループでファイルを開いた後に追加する必要があります。 –

+0

.read()は動作しますが、行が同一である場合のみです。 "hello"を検索する必要がある場合、 "hello123"と書かれているとそれを見つけることができません。 これを解決する方法はありますか? – ferdio

答えて

3

openのデフォルトモードであることを

def search(): 
    file1_content = open('/home/example/file1.txt').read() 
    datafile = open('/home/user/datafile.txt') 

    for line in datafile: 
     if line in file1_content: 
      print '%s found' % line 
     else: 
      print '%s not found' % line 

注意を'r'ので、テキストモードで読み込んでいる場合は、そのパラメータを渡す必要はありません。

+0

また、 "datafile.read()'のようにforループに追加するか、ファイルを開いたときに、 "datafile"の読み込みを忘れてしまった。 –

+0

@PrestonHagerそれは完全に必要ではありません。行は 'read'を呼び出さずに等しくフェッチされます。そして、 'read'を使うと、' splitlines'を呼び出す以外は暗黙的に行を繰り返すことはできないことに注意してください。 –

+0

確かに、私はそのコードをテストしていません。しかし、私はあなたが '.split( '\ n')'で読んだり何かを呼ばなければならないと確信しています。あなたが間違っていると言っているわけではありませんが、私はあなたの権利を考えません。 –

0

ファイルをsetに読み込んで、2番目のファイルに含めるかどうかを確認できます。 setのリストは、そのリストに含まれているかどうかを調べるのが一般的に高速です。

def search(): 
    file1 = set(open('/home/example/file1.txt')) 
    datafile= open('/home/user/datafile.txt', 'r') 

    for line in datafile: 
     if line in file1: 
      print '%s found' % line 
     else: 
      print '%s not found' % line 

ます。また、最初のファイルではない、例えば、すべての行を抽出するために集合演算を使用することができます。

set(open('/home/user/datafile.txt', 'r')) - set(open('/home/example/file1.txt')) 
関連する問題