2016-05-29 10 views
0

タイトルは誰も正義をしていない可能性があります。 waterfireairなどの単語のリストについては、ドライブE:\をスキャンするプログラムを作成しようとしています。私のE:\ドライブの中で、私は明らかにフォルダ内のフォルダやフォルダ内のファイルなどを持っています。ディレクトリをスキャンし、ファイル内の文字列を検索し、結果を出力します。

私は関数search (path, text)を呼び出したいと思います。テキストでは、リスト['water', 'fire', 'air']を入力することができます。したがって、次のようになります:search('E:\\', ['water', 'fire', 'air'])

私はディレクトリをスキャンしたいと思っています。スキャンしているそれぞれの「ライン」で、Scanning: E:\\...を印刷します。私はこれを持っています。私はまた、それが水、火および/または空気を見つけるときに、出力するためにIn (directory name) found water, fireを望む。 In (directory name) found airなどです。私はこの部分のほとんどを持っています。私はそれが複数の単語を表示する方法を理解することはできません(該当する場合)。

私が探しています出力は、例えば、次のように次のようになります。ここでは

Scanning: E:\ Scanning: E:\Python Fun! Scanning: E:\Python Fun!\1st Week Scanning: E:\Python Fun!\2nd Week Scanning: E:\Python Fun!\3rd Week In E:\Python Fun!\3rd Week\elements.txt found 'fire', 'water' Scanning: E:\Python Fun!\4th Week Scanning: E:\Python Fun!\5th Week In E:\Python Fun!\5th Week\elements.txt found 'air Scanning... だから、私のコードです:私が得た

import os 
def search(path, text): 

    for text in texts: 
     if os.path.isfile(path): #base case 
      if text in path: 
       print(path) 
      return 

    if not os.path.exists(path): 
     return 

    for item in os.listdir(path): 
     itempath = os.path.join(path, item) 

     if os.path.isfile(itempath): 
      if text in item: 
       print('In {} found {}'.format(itempath, word)) 

     elif os.path.isdir(itempath): 

      search(itempath, text) 
      print('Scanning:', path) 
      #open(itempath).read() #tested this but got an error. See below. 
     else: #unknown object type 
      pass 

search('E:\\',['water','fire', 'air']) 

TracebackエラーがAttributeError: 'str' object has no attribute 'read'ました。だから私はそれをコメントアウトした。

このコードでは、基本的に私のリストにあるものの最後の文字、この場合はの検索結果を取得しています。余分なループが原因だと思っていますか?しかし、正確にはわからない。

私はopen filenameをどこかに追加する必要があることを知っていますが、それを実装する方法については混乱しています。私はちょうどOSモジュールについて学び始めました。そこで混乱の大部分が出てきます。私は困惑している。

答えて

0

再帰的にあなたのドライブではなくglobを使用することを検討して反復する場合:

import glob 

for filename in glob.iglob('E:/**/**', recursive=True): 
    print("Scanning", filename); 
    with open(filname, 'r', encoding='utf-8') as file: content = file.read() 
    for text in texts: 
     if text in content: 
      print("Found:", text, " - ", filename); 

ファイルの内容をスキャンするためには、あなたも、それらをopen()する必要があります。

+0

グロブなしでそれを行う方法はありますか?おそらくコードはあまり単純ではなく、予想通りです。しかし、私はPythonの詳細を学び、後でショートカットに入りたいので、私は何をしているのか、複雑な状況に直面したときに何を探すべきかを知りたいです。 – adhamncheese

関連する問題